【C++基础】公有,私有和受保护的继承
2014-02-07 00:33
225 查看
对类所继承的成员的访问由基类中的成员访问级别和派生类派生列表中使用的访问标号共同控制。
派生类可以进一步限制但不能放松对所继承的成员的访问。
public inheritance:基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。
protected inheritance:基类的public和protected成员在派生类中为protected。
private inheritance:基类的所有成员在派生类中为private成员。
示例:
private inheritance:
private继承是实现继承,不是接口继承;
如果classes之间的继承关系是private,编译器不会自动将一个derived class对象转换为一个base class对象;
private继承并不意味着is-a关系;
private继承在软件设计层面上没有意义,其意义只及于软件实现层面;
派生类可以进一步限制但不能放松对所继承的成员的访问。
public inheritance:基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。
protected inheritance:基类的public和protected成员在派生类中为protected。
private inheritance:基类的所有成员在派生类中为private成员。
示例:
class Base { public: void basemen(); // public member protected: int i; // protected member // ... }; struct Public_derived : public Base { int use_base() {return i;} // ok; derived classes can access i // ... }; struct Private_derived : private Base { int use_base() {return i;} // ok; derived classes can access i }; Base b; Public_derived d1; Private_derived d2; b.basemen(); // ok; d1.basemen(); // ok; basemen is public in the derived class d2.basemen(); // error; basemen is private in the derived class struct Derived_from_Private : public Private_derived { // error; Base::i is private in Private_derived int use_base() {return i;} }; struct Derived_from_Public : public Public_derived { // ok; Base::i remains protected in Public_derived int use_base() {return i}; };
private inheritance:
private继承是实现继承,不是接口继承;
如果classes之间的继承关系是private,编译器不会自动将一个derived class对象转换为一个base class对象;
private继承并不意味着is-a关系;
private继承在软件设计层面上没有意义,其意义只及于软件实现层面;
class Base { }; class Derived : private Base { }; void test(Base* rhs){} Base b; Derived d; test(&b); // ok; test(&d); // error;
相关文章推荐
- C语言 动态生成矩阵,并实现其录入转置
- C语言 数字进制间的转换
- 用C++11实现spinlock
- c语言的位操作
- 《你必须知道的495个C语言问题》知识笔记及补充
- C语言-整型转字符型,字符型转整型
- tokbox获取sessionId和tokenId for c++版本
- 堆-栈-动态存储方式-静态存储方式
- scanf格式控制符的完整格式
- 今年暑假不AC
- 汽车加油问题
- 删数问题
- c++标准库简介
- c语言的贪吃蛇
- C++的前向声明、嵌套类、局部类
- C++学习--get与getline
- 2013蓝桥杯 【初赛试题】 马虎的算式
- VC++中计算程序的运行时间
- STL中map的使用
- C++中Vector(向量)使用erase时应该注意的事项