可能是我的问题是错的。我是C ++的新手。 如果在派生类中重写该函数,是否有任何方法使用派生类对象调用基类成员函数?
例如:
class A {
public:
void add() { cout<<"A"; }
};
class B: public A {
public:
void add() { cout<<"B"; }
};
int main() {
B bObj;
bObj.add(); // calls member function of class B
return 0;
}
答案 0 :(得分:1)
首先,你并没有真正重写add
函数,只是隐藏了名称,因为A::add
未声明为virtual
。
要致电A::add
,请明确说明:
bObj.A::add();
答案 1 :(得分:0)
通常,B::add()
存在是有原因的,您可能不应该在A::add()
上调用B
。不能说你不能 - 你必须先把它变成A
:
B bObj;
static_cast<A&>(b).add(); // calls A::add()
或明确指明它是A::add()
:
bObj.A::add();
来自 B
内的,您必须符合通话资格:
class B: public A {
public:
void add() { cout<<"B"; }
void test() {
add(); // calls B::add
A::add(); // calls A::add
}
};