C++中三种继承方式
来源:互联网 发布:java登录界面设计代码 编辑:程序博客网 时间:2024/06/05 16:27
几重转载,不知原作出自何处
我们知道类的private和protected成员,在类外是不可以使用的,只有public成员可以在类外直接使用。公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用。继承过来(变成派生类相应的public和protected成员)只有public成员在派生类外可以直接使用。
保护继承时,基类的private成员仍为有私有,基类的public和protected成员变成派生类的protected成员,这时在派生类外也不能直接使用原基类的public成员。
私有继承时,基类的private成员仍为有私有,基类的public和protected成员将变成派生类的private成员。
举个例子:
class A{ public: int m_public; protected: int m_protected; private: int m_private;};class B :public A{ void SetPublic(int nPublic) { m_public = nPublic; } void SetProtected(int nProtected) { m_protected = nProtected; } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 }};B b; //创建B类的对象cb.m_public = 100; //正确b.m_protected = 100; //错误,public继承中基类的protected在派生类中是protectedb.m_private = 100; //错误,在派生类中都不可以直接使用,在类外就更不能了class C :protected A{ void SetPublic(int nPublic) { m_public = nPublic; } void SetProtected(int nProtected) { m_protected = nProtected; } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 }};C c; //创建C类的对象cc.m_public = 100; //错误,protected继承C类里变成了protected成员c.m_protected = 100; //错误,protected继承C类里还是protected成员c.m_private = 100; //错误,在派生类中都不可以直接使用,在类外就更不能了class D :private A{ void SetPublic(int nPublic) { m_public = nPublic; } void SetProtected(int nProtected) { m_protected = nProtected; } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 }};D d; //创建D类的对象dd.m_public = 100; //错误,private继承D类里变成了private成员d.m_protected = 100; //错误,private继承D类里变成了private成员d.m_private = 100; //错误,在派生类中都不可以直接使用,在类外就更不能了
从例子来看,三种继承从派生类内部引用来看好像没有区别,只在类外引用时表现不同。现在还看不出public和protected继承的区别
那再看一个例子:
class E :public B{ void SetPublic(int nPublic) { m_public = nPublic; //正确 因为这是B类的公有成员 } void SetProtected(int nProtected) { m_protected = nProtected; //正确 因为这是B类的保护成员,现成变成E类的protected成员 } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 }};E e; //创建E类的对象ee.m_public = 100; //正确e.m_protected = 100; //错误,protected继承E类里变成了protected成员e.m_private = 100; //错误,在派生类中都不可以直接使用,在类外就更不能了class F :public C{ void SetPublic(int nPublic) { m_public = nPublic; //正确 因为这是C类的protected成员 } void SetProtected(int nProtected) { m_protected = nProtected; //正确 因为这是C类的protected成员,现成变成F类的protected成员 } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 }};F f; //创建F类的对象ff.m_public = 100; //错误,在C类里就已变成protected成员f.m_protected = 100; //错误,protected继承E类里变成了protected成员f.m_private = 100; //错误,在派生类中都不可以直接使用,在类外就更不能了class G :public D{ void SetPublic(int nPublic) { m_public = nPublic; //错误 因为这是D类的private成员 } void SetProtected(int nProtected) { m_protected = nProtected; //错误 因为这是D类的private成员 } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 }};//那G在类外就没有了可以引用的继承过来成员了
0 0
- C++(继承语法&&继承方式)
- c++中三种继承方式
- C++中三种继承方式
- C/C++继承方式--形象化表述
- C++/3种继承方式测试
- C++——三种继承方式
- C++-继承的概念与方式
- public、protect、private继承方式 C++(转)
- 【C++】:C++中的继承权限和继承方式
- 类设计中三种继承方式
- 继承方式
- 继承方式
- 继承方式
- 继承方式
- 关于C++中三种继承方式的讨论(公有继承,私有继承,保护继承)
- 【C++】虚函数在不同继承方式中的对象模型
- c++中三种继承方式的区别!
- 继承一之继承方式
- Linux Advanced Routing & Traffic Control HOWTO
- POJ 3187 Backward Digit Sums
- C语言巧妙运用位运算十进制转化为二进制输出
- HDU 5241 Friends
- HDU 1150
- C++中三种继承方式
- android ListView 防止图片上拉跳动
- UIday0802:UINavigationController 传值(界面通信)
- 栈内存与堆内存的区别
- 数据降维方法小结
- 杨辉三角(Pascal三角形)
- Java中如何由枚举常量的ordinal值获得枚举常量对象
- 欢迎使用CSDN-markdown编辑器
- Java线程池