第五章----继承
1.1继承和派生的基本概念
继承:在定义一个新的类B时,如果该类与某个已有的类A相似(类B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)
派生类是通过对基类进行修改和扩充得到,在派生类中可以扩充新的成员变量和成员函数。
派生类一经定义后,可以独立使用,不依赖于基类
派生类拥有基类的全部成员函数和成员变量,不论是private、protected、public
在派生类的各个成员函数中,不能访问基类中的private成员
【派生类对象的内存空间】
eg。学籍管理
1.2继承关系和复合关系
类的两种关系
使用继承关系的例子
使用复合关系
eg.写一个小区养狗管理程序,需要写一个“业主”类,还需要写一个“狗”类,假定狗只有一个主人,但一个业主可以有最多10条狗
以上做法编译无法通过
这个写法也还是不对的
关键在于如何维护不同的狗相同的主人
1.3覆盖和保护成员
【覆盖】:派生类可以定义一个和基类成员同名的成员
在派生类中访问这类成员时,缺省的情况(不交代是基类还是派生类)是访问派生类中定义的成员,要在派生类中访问由基类定义的同名成员时,要使用作用域符号::
【类的保护成员】
友元函数(friend function)是一个定义在类外部的函数,但它被声明为该类的“朋友”,因此可以访问这个类的所有私有(private)和受保护(protected)成员。这意味着,如果一个函数被声明为某个类的友元函数,它确实可以访问该类的protected成员变量。
int main() {Derived d;// cout << d.protectedVar; // 错误:'int Base::protectedVar' 是 protected 的return 0;
}
1.4派生类的构造函数
【派生类对象的构造函数里面怎么去初始化从基类继承得到的那些私有成员?】
注:派生类的析构函数被执行时,执行完派生类的析构函数后,自动调用基类的析构函数
1.5公有继承的赋值兼容原则
注:如果派生方式是public或者protected,则上述三条不可行
【直接基类和间接基类】
声明派生类的时候,只需要列出它的直接基类
派生类沿着类的层次自动向上继承它的间接基类
派生类的成员包括:
1)派生类自己定义的成员2)直接基类中的所有成员3)所有间接基类的全部成员