c++复习(七)

第七章 类的继承的基本概念和语法

继承和派生
继承和派生是从同一过程不同角度看:
保持已有类的特性而构造新类的过程称为继承,在已有类的基础上增加自己的特性而产生新类的过程叫做派生,被继承的已有类叫做基类,派生出的新类叫做派生类,直接参与派生出某类的基类叫做直接基类,基类的基类甚至更高层的基类叫做间接基类

继承是为了实现设计与代码重用,派生是为了在遇到新问题时改进程序

单继承时派生类的定义:
class 派生类名 :继承方式 基类名
{
成员声明;
}
例如:class Derived :public Base
{
public:
Derived();
~Derived();
};

多继承时派生类的定义:
class 派生类名:继承方式1 基类名1,继承方式2 基类名2
{
成员声明;
}

派生类的构成:吸收,改造,添加;除原函数中构造函数和析构函数之外的所有成员;

继承的方式简介:
公有:基类的public和protected成员,访问属性在派生类中保持不变,但是不能直接访问private成员,通过派生类的对象,只能访问public成员
私有:最严格的一种继承,积累的所有成员都以private的方式出现
保护:

**类型转换:**基类和派生类
公有派生类对象可以被当做基类的对象使用,反之不可以
派生类的对象可以隐含转换为基类对象,派生类的对象可以初始化基类的引用,派生类的指针可以隐含转换为基类的指针。
通过基类对象名,指针只能使用基类继承的成员,

不要重新定义继承而来的非虚函数

派生类的构造函数
派生类需要自己定义构造函数,无法继承
c++11规定:可用using语句继承基类构造函数,可是只能初始化从基类继承的成员,语法形式:using B::B;//不进行初始化,会产生垃圾数据

单继承时构造函数的定义语法:
派生类名::派生类名(基类所需的形参,本类所需的形参):基类名(参数表),本类成员初始化列表
{
//其他初始化;
};

多继承时构造函数的定义语法:
派生类名::派生类名(参数表):基类名1(基类初始化参数表)
,基类名2(基类初始化参数表)…
{
其他初始化;
};

派生类的复制构造函数:
若派生类定义复制构造函数:
一般都要为基类的复制构造函数传递参数,复制构造函数只能接受一个参数,既用来初始化派生类定义的成员,也将被传递给基类的复制构造函数,基类的复制构造函数形参类型是基类对象的引用,实参可以是派生类对象的引用

派生类的析构函数:
析构函数不被继承
系统会自动隐士的调用
析构顺序与构造顺序相反

访问从基类继承的成员:
作用域限定符::

二义性:如果从不同基类继承了同名成员,但在派生类中没有定义重名成员,“派生类对象名或者引用名.成员名”,"派生类指针->访问成员"存在二义性问题,解决方式:用类名限定。
同名隐藏指的是:在基类和派生类中都定义了同名函数时,在派生类中调用时,直接调用派生类中的,而基类中的被隐藏

冗余:浪费空间,不一致性,发生错误

虚基类:当派生类从多个基类派生,而这些基类又有共同基类,则在访问此共同基类中的成员时,将产生冗余,并有可能因为冗余带来不一致性,在第一级继承时将共同基类设计为虚基类,可以解决冗余问题。
声明:以virtual说明基类继承方式
例:class B1:virtual public B
建立对象时所指定的类称为最远派生类

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章