Toriyung

导航

C++:private继承

平时我们使用类继承是这个画风:
class child:public::father
{};

表示子类child继承父类father,这里有个关键词"public",表示继承到的父类属性和方法为自己的public成员,这种情况下

子类的对象或者说实例化是可以直接访问这些成员的

 

当改成

class child:private::father
{};

则继承父类为自己的private成员,这种情况下

子类的对象是不可以直接访问的,只能通过类内成员访问

 

下面给个例子

class A
{
private:
public:
 A(/* args */){};
 void APrint()
 {
    cout<<"i am A"<<endl;
 }
};

class B:private::A
{
private:
public:
 B(/* args */){};
 void callAPrint()
 {
    APrint();
 }
};

 int main()
 {
    A a;
    B b;

    cout<<"a.APrint()"<<endl;
    a.APrint();
    cout<<"b.APrint()"<<endl;
    b.APrint();
    cout<<"b.callAPrint()"<<endl;
    b.callAPrint();
    
    return -1;

 }

B类以private的方式继承了A类。

然后我们实例化了A a,B b,并进行三个动作

父类A的对象a调用自己的方法APrint(), 是合法的

子类B的对象b调用从父类以private方式继承过来的方法APrint(),是不合法的

字类B的对象b调用其自己的方法,该方法在类内调用继承过来的方法APrint(),是合法的

 

实验结果

 可以看到第二种直接报错

 

我们屏蔽了第二种

 

 没问题

posted on 2024-05-12 23:12  Toriyung  阅读(46)  评论(0编辑  收藏  举报