平时我们使用类继承是这个画风:
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(),是合法的
实验结果
可以看到第二种直接报错
我们屏蔽了第二种
没问题
标签:继承,子类,C++,APrint,private,父类,public From: https://www.cnblogs.com/toriyung/p/18188400