C++使用派生类调用基类成员函数的继承

C++ inheritence calling base class member function using derived class

本文关键字:成员 函数 继承 基类 调用 派生 C++      更新时间:2023-10-16

可能是我的问题错了。我是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; 
}

首先,您并没有真正覆盖add函数,只是隐藏了名称,因为A::add没有声明virtual

要调用A::add,只需明确说明:

bObj.A::add();

通常,B::add()存在是有原因的,您可能不应该在B上调用A::add()。这并不是说你不能 - 你只需要先把它变成一个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
    }
};