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(),是合法的
实验结果
可以看到第二种直接报错
我们屏蔽了第二种
没问题
标签:
c/c++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通