继承
来源:互联网 发布:淘宝 html5 编辑:程序博客网 时间:2024/05/22 14:43
一.继承 目的:代码重用
1
概念: 保持已有类的特性而构造新类的过程称为继承
派生:在已有类的基础上新增自己的特性而产生新类的过程
1.1方式
class GraduateStudent:public Student
2. 派生类
2.1 派生类可以直接访问基类保护数据成员
2.2 派生类的构造,当基类有默认构造函数时,当创建派生类的对象时,派生类的构造函数会自动调用基类的构造函数
3 三种继承方式
公有继承
基类的public和protected成员的访问属性在派生类中保持不变,基类的private成员不可直接访问
派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员
通过派生类的对象只能访问基类的public成员
私有继承
基类的public和protected成员都以private身份出现在派生类中,基类的private成员不可直接访问。
派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。
通过派生类的对象不能直接访问基类中的任何成员
保护继承
基类的public和protected成员都以protected身份出现在派生类中,基类的private成员不可直接访问
派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员
通过派生类的对象不能直接访问基类中的任何成员
4 默认的继承是私有的
5.赋值兼容规则
派生类的对象可以赋值给基类对象。
派生类的对象可以初始化基类的引用。
派生类对象的地址可以赋给指向基类的指针
6.一个私有的或保护的派生类不是子类,因为非公共的派生类不能做基类能做的所有的事。
二.多重继承
有冲突(如沙发床的重量)
解决冲突,用虚拟继承(遇到重复的屏蔽一个或删除一个)
在Bed和Sofa继承Furniture中加上virtual关键字
三.多态 目的:接口重用
1.多态的条件
1.1 C++多态是通过虚函数实现的,虚函数允许子类重新定义成员函数,
而子类重新定义父类接口的做法称为覆盖或重写
1.2 子类需要公有继承于父类
1.3 定义父类的指针或引用,然后通过指针或引用去调用相应的虚函数
1.4 通过多态可以用基类指针访问各个派生类的成员函数
2 虚函数
成员函数前加virtual,实现多态
2.1
重载与重写的区别
重载overload:函数名相同,参数列表不同,重载只是在同类的内部存在,并且不能靠返回值来判断
重写overwrite:也称覆盖,子类重新定义父类中的同名函数。函数特征相同,单数具体实现不同,基类的函数要有关键字virtual,主要是在继承关系中出现。
2.2 判断子类成员函数是否为虚函数
2.2.1 该函数与基类是否有相同的函数名
2.2.2 该函数与基类的虚函数是否有相同的参数个数及相同对应参数类型
2.2.3 该函数与基类的虚函数是否有相同的返回值或者满足赋值兼容规则的指针,引用的返回值