派生类函数如何调用基类的函数?

how can a derived class function call a function of the base class?

本文关键字:基类 函数 调用 类函数 何调用 派生      更新时间:2023-10-16

当访问说明符为private时,派生类函数甚至不能访问基类的public成员。但是,我的派生类的函数' xyz '如何能够调用' showofb '?我甚至通过调用c的构造函数' showofb '来尝试它。在这两种情况下,它都有效。如何能够调用函数' showofb ' ?

class B  
{  
    public:  
    B()  
    {  
        cout<<":B:"<<endl;  
    }  
    void showofb()  
    {  
        cout<<"show of b"<<endl;  
    }  
};
class C : private B  
{
public:  
   C()  
   {  
        cout<<":C:"<<endl;  
   }  
   void xyz()  
   {  
        showofb();  
   }  
};  
int main()  
{  
    C c1;  
    c1.xyz();  
}    

私有继承将父类的public成员继承为子类的Private成员。类可以调用自己的或继承的私有成员。

考虑一下:

class B  
{  
    public:  
    B()  
    {  
        cout<<":B:"<<endl;  
    }  
    void showofb()  
    {  
        cout<<"show of b"<<endl;  
    }  
};  
class C : private B  
{
public:  
C()  {}
};  
class D : public B
{
 public:
    D(){};
}
int main()  
{  
    C c1;  
    c1.showofb();  // WONT WORK
    D d1;
    d1.showofb();  // WILL WORK
}    

B::showofb()是一个公共函数。所以它可以被C调用。如果你修改B使showofb私有,C将不能再调用它。

私有继承意味着B的所有public和protected成员都被C作为私有继承。因此,C仍然可以调用B的public和protected成员,但是任何从C派生的类将不能调用B的成员。

user1001204,您似乎对私有继承有一个错误的概念。类C通过私有继承从类B继承,这意味着继承关系对使用类C的任何东西都是隐藏的。私有继承并不隐藏C类内部的继承关系。