C++——继承
一、继承
1、继承的写法 派生类:继承方式(三种属性) 基类,继承方式(三种属性) 基类 ....
示例:
class Father
{};
class son:pulbic Father
{};
子类son继承了父类Father
1、子类拥有父类得所有成员变量和成员函数
2、可以在子类添加父类没有方法和属性
3、子类对象可以当作父类对象来使用(子类拥有父类得所有成员变量和成员函数)
二、继承方式
1、类的访问属性有三种,public(共有),proteted(保护),private(私有)
2、类的继承方式也有三种就是上面的三种,每种继承方式都会有不同的地方
3、被继承的类称之为基类(父类),继承的类称之为派生类(子类)
4、一个基类可以有很多个派生类,一个派生类也可以有很多个基类
如果在一个子类继承多个父类容易出现二义性,即同样的的数据\函数在这个子类所继承的多个父类当中都有这样一个成员,子类在调用这个同名的成员的时候就不知道是再调用那个父类的成员了,所以容易导致二义性,解决方法就是使用作用域,在调用的时候明确说明调用按个父类的就可以了, <子类对象.父类::数据\成员>
三、继承中得构造和析构
1、子类会继承父类的成员属性,成员函数,但是不会继承构造和析构,这个只有父类知道如果构造析构自己的属性,子类不知道
2、构造顺序是,先构造父类,然后子类;析构顺序时,先析构子类,然后父类,这个是一个入栈和出栈得过程
3、子类不会继承父类得构造和析构,但是在子类对象构造\析构的时候会给会调用父类的构造\析构,所以在构造\析构子类对象的时候要确保父类里面的有构造\析构可用
四、继承中的同名处理
1、如果子类和父类拥有同名数据和函数,子类会把父类的所有同名数据和函数都隐藏掉,在调用的时候默认调用子类成员
2、如果想要调用父类成员,就需要用作用域访问<子类对象.父类::父类的同名数据\函数>,就需要如此访问
3、子类不会覆盖父类的同名数据和函数,只是隐藏
五、菱形继承
A
/ \
B C
\ /
D
在A类中如果有一个成员a,那么在b和c也同样会继承过来,d也会继承A,B,C中的成员,在这里就会有类似同名的问题,在d这里的对象调用那么就不知道调用谁的了,可以使用虚继承在继承的前面加上关键字virtual <virtual public A>,操作的是共有一份数据,如果在BC中还是有同名的,还是需要用作用域来访问对应的成员