c++继承
一、类之间的关系
has-A 包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。
uses-A 一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。
is-A 机制称为“继承”。关系具有传递性,不具有对称性。
二、继承的重要说明
1、子类拥有父类的所有成员变量和成员函数
2、子类可以拥有父类没有的方法和属性
3、子类就是一种特殊的父类
4、子类对象可以当作父类对象使用
三、类与继承的访问控制
1.类中成员的访问控制
public:在类的内部、外部都能使用
protected:在类的内部使用,在继承的子类中使用
private:只能在类的内部,不能在类的外部(包括继承中的子类也不能使用)
2. C++中的继承方式会影响子类的对外访问属性
public继承:父类成员在子类中保持原有访问级别
private继承:父类成员在子类中变为private成员
protected继承:父类中public成员会变成protected
父类中protected成员仍然为protected
父类中private成员仍然为private
3. ‘三看’原则
1)看调用语句,这句话写在子类的内部、外部
2)看子类如何从父类继承(public、private、protected)
3)看父类中的访问级别(public、private、protected)
四、继承中的兼容性原则
类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。
void howtoPrint(parent *base) { base->printP();父类的成员函数 } void howtoPrint2(parent &base) { base.printP();父类的成员函数 } { //第一种含义: parent p1; child c1; parent *p = NULL; //1-1 基类指针(引用)指向子类对象 p = &c1; p->printP(); //1-2 指针做函数参数 howtoPrint(&p1); howtoPrint(&c1); //引用做函数参数 howtoPrint2(p1); howtoPrint2(c1); //第二种含义: //可以用 子类对象初始化父类对象 parent p3 = c1; }