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

时间:2011-10-23 09:08:49

标签: c++

当访问说明符为私有时,派生类函数甚至无法访问基类的公共成员。但是我的派生类的函数“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();  
}    

3 个答案:

答案 0 :(得分:3)

私有继承继承父级的公共成员作为子级的私有成员。一个类可以调用自己的或继承的私有成员。

考虑一下:

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
}    

答案 1 :(得分:1)

B::showofb()是一个公共职能部门。所以它可以被C调用。如果您修改B以使showofb变为私有,C将无法再调用它。

私有继承意味着B的所有公共成员和受保护成员都被C作为私有继承。因此,C仍然可以调用B的公开成员和受保护成员,但是从C派生的任何类都无法调用B的成员。

答案 2 :(得分:0)

user1001204,您似乎有一个错误的私有继承概念。该类C通过私有继承继承自类B意味着继承关系对使用类C的任何内容隐藏。私有继承不会隐藏类C本身内的继承关系。