在学习继承之前, 首先要对类有着比较多的了解, 不大熟悉的可先看这里
继承是C++的一大精髓之所在, 同时继承也是有着难点, 本篇从基础部分介绍.
继承的关系大概是这样的:
上图的 "父亲" 的类叫做基类, 父类或超类
上图的 "孩子"与"孙子"以及可能出现更多的"子子孙孙"的类叫做子类
而这种的结构图叫做: 继承层次结构
在编写继承的时候, 结构图一定要先理出来, 分析出来.
这些理论先要理清楚, 再实现
扫描二维码关注公众号,回复:
8664026 查看本文章
为了能更好地理解, 本人使用Windows平台上的win32的窗口思想来举一个类似继承的例子:
(注意: win32编程中窗口没有继承, 但是可以用继承层次结构来分析)
在继承结构中, 一定要注意箭头的方向, 注意是由 子类->父类, 而不是 父类->子类
继承有以下基本特点:
1. 继承时子类可以访问父类的 public, protected 数据成员, 但不得访问 private部分 (子类具有并可以修改访问父类的 public, protected 的数据成员)
2. 继承时子类能访问到父类的数据, 但父类无权访问子类 (如上图箭头所示)
3. 继承中当子类的指针或引用要转换为父类时, 会发生截断现象
4. 继承具有多态性
首先解释一下:
1. 数据截断可以理解为当发生子类的引用或指针转父类时, 子类中独有的数据将会全部丢失
2. 多态性其实就是在解释上面的第1点, 也就是子类不仅具有父类的数据, 也可以有自己的独有的数据
现在尝试编写继承:
class Basic { string myPrivate="Private"; protected: string myProtected="Protected"; public: string myPublic="Public"; }; class Child: public Basic //继承一个类的表示方法 { public: void getMembers() { cout<<myPublic<<endl;//Worked cout<<myProtected<<endl;//Worked cout<<myPrivate<<endl;//Error! } }; int main() { Child child; child.getMembers(); return 0; }
实践表明, private无法访问.
有关继承的基础部分已结束, 请等待更新.