原创 【学习笔记】C++之四-继承与多态

2011-3-23 19:27 2188 8 8 分类: MCU/ 嵌入式
n 继承概念

可重用性:即利用已经开发的软件资源进行软件开发,而不需要完全重新编码。


派生类是基类的具体化,基类是派生类的抽像。

             
单重继承:

             
多重继承:当新类型即是类型A、也是类型B、C时,可使用多继承。其带来的“歧义性”问题指的是当继承的多个类有同名的成员时,派生类在访问时将无法决定访问哪个成员,这时需要加成员限定符:基类名::成员名来解除歧义。


通过继承建立的基类与派生类的关系,是一种“是”的关系;而通过组合建立的成员类与组合类之间的关系,是一种“包含”的关系


   d4b523e1-2831-4f65-a726-203e74726bb3.JPG


n 继承方式


u   派生类构成


派生类在从基类继承时,做了如下调整:


             
派生类继承基类所有和数据成员和成员函数,不包含构造函数和析构函数,并可对成员作必要的增加和调整。有可能造成数据冗余,选取基类时,应注意使冗余最小。


             
调整从基类接收的成员:通过指定继承方式改变基类成员在派生类中的访问属性;声明与基类成员同名的成员,则将覆盖基类中的同名成员;如果是函数,则需要派生类和基类中的声明完全相同,否则成为“重载”。


             
在派生类中重新定义基类的成员运算符时,为完成某些附加的工作,派生类版本通常需要调用基类的函数版本,此时需要使用作用域运算符:基类名::成员名


u  权限控制


表格3.1 几种继承方式




基类成员访问说明符



继承类型



 



PUBLIC(保留属性)



PROTECT[U1] 



PRIVATE



PUBLIC



Public



Protect



private



PORTECT



Protect



Protect



private



PRIVATE



不可访问[U2] 



不可访问



不可访问[U3] 




保护继承:在多重继承中,可关闭部分权限(public->protect),但是又可在新的派生类中继续保留权限(protect->protect)。相对而言,public无法关闭权限,仅           保留权限;而private可关闭权限,但是多重继承后,后续的派生类将无法访问基类的公有和保护成员。


u    派生类的构造/板构函数


派生类不继承基类的构造函数和赋值运算符,但是派生类可调用这些函数。基类的成员的初始化由派生类构造函数隐式或显式(在构造函数中提供基类初始化值)调用基类构造函数。形式为:


派生类构造函数名(总参数列表) :基类构造函数名(参数名列表),子对像名(参数列表)


{

派生类新增成员初始化语句

}


若基类包含其它对像,则先执行基类中对像的构造函数,再执行基类的构造函数,再执行派生类成员对像的构造函数,最后才执行派生类的构造函数。而析构函数的调用顺序正好相反,且被自动调用。即按照所谓的“继承顺序”依次建立整个派生类


u  多重继承的二义性问题


现像:即继承时多个基类包含相同的成员,编译系统无法判定选择哪个基类的成员。


解决方法:添加类作用域运算符“:”,如C1.BaseClass::display()。


使用虚基类:class 派生类名:virtual
public/private/protect 基类名,当基类通过多条路径被一个派生类继承时,该派生类只继承该基类一次,即保留一份基类成员;而不必要重复包含多次。在最后的派生类中需要对直接基类和虚基类初始化。编译器不会自动调用虚基类的构造函数,而需要在最后的派生类中手动调用。                   


u   派生类与基类间的转换


公有派生类的对像可作为其相应的基类对像处理;即可以将派生类指针转换为基类指针,访问基类的成员,但不可访问派生类的成员。反过来是“不可逆”的。即派生类属于基类,但基类不属于派生类。


             
可以用派生类对像向子类赋值;


             
派生类对像可以向基类对像的引用进行赋值或初始化;


             
派生类对像的地址可赋值给基类对像的指针变量。







 [U1]完全防止外部调用,但是又开放了部分权限,且后续继承的类仍然可继续访问。






 [U2]Pblic,保留原有的特性,仅隐藏Private特性隐藏基类的内部实现,信息隐藏






 [U3]Private接口完全由派生类使用,外部只能调用派生类的公用接口。权限更强




文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条