【C++】 类和对象期末复习笔记(三)——继承和派生

引言:

前面已经写了两篇基础篇笔记,这一篇是继承和派生专题。
前两篇笔记地址如下

笔记一
笔记二

正文:

1、继承分为单一继承和多重继承

单一继承:派生类仅由一个基类派生
多重继承:派生类由多个基类派生

2、继承方式:公有继承(派生)public、保护继承(派生)protected、私有继承(派生)private
例:

class B public:A
{
	......	
};

class B protected:A
{
	......	
};

class B private:A
{
	......	
};

3、A派生了B=B继承了A

4、不同继承方式下,基类成员的访问权限在派生类中的边变化。(见图)【C++】 类和对象期末复习笔记(三)——继承和派生_第1张图片
5、无论何种继承方式,基类的private成员在派生类中均不可直接访问

6、在有继承的情况下,无论何种继承方式,private成员都无法在派生类中被直接访问。而对于protected成员,无论何种继承方式,在派生类中都可以被直接访问。

7、一般在类的继承体系中,将类的数据成员的访问权限定义为protected较好。

8、多重继承:一个派生类有多个基类。
例:

class Circle:public Point, public Radius
{
	......
};

9、若一个类是由多个基类派生出来的,则在定义派生类构造函数时,需要调用基类的构造函数,初始化基类成员。

10、派生类构造函数的执行顺序为:首先依次调用基类构造函数,然后执行派生类自身的构造函数体。

11、析构函数的执行顺序为:首先执行派生类自身的析构函数体,然后调用基类的析构函数。

12、当基类的构造函数没有参数或没有显示定义构造函数时,派生类可以不向基类传递参数,甚至不定义构造函数。

13、当基类含有带参的构造函数时,由于派生类不能继承基类的构造函数或析构函数,派生类必须定义构造函数,以传参给基类构造函数。

14、派生类构造函数的调用顺序:先调用基类的构造函数,再调用对象成员的构造函数,最后调用对象自身的构造函数。

15、派生类析构函数的调用顺序和构造函数相反。

16、基类的构造函数和析构函数都不会被派生类继承。

17、在多重继承中,当在派生类中出现两个以上同名的可直接访问的基类成员时,便出现了二义性(访问冲突)。

18、当把派生类作为基类,继续派生出新的派生类时,这种限定作用域的运算符不能嵌套使用,是错误的。
例:

Point::Sample::Person::show();

19、任一基类在派生类中只能被直接继承一次。

20、支配规则:对同名成员的访问,派生类优先的优先关系。

21、虚基类
1)举个经典的例子:假设定义了一个公共基类A,类B和类C都由类A公有派生,类D由类B和类C公有派生。显然D包含类A的两个拷贝,不仅多占用内存,而且还造成多个拷贝的数据不一致。

因此,为了避免这种情况的出现,我们将基类设置为虚基类,当基类设置为虚基类时,只拷贝一次虚基类。

2)如果派生类继承了多个基类,基类中有虚基类和非虚基类,那么在创建该派生类的对象时,先调用虚基类的构造函数,然后调用非虚基类的构造函数,最后调用派生类的构造函数。若虚基类有多个,则虚基类构造函数的调用顺序取决于它们继承时的说明顺序。

3)定义虚基类的方法:在基类的类名前加关键字virtual。
例:

class A:virtual public B
{
	......	
};

class A:public virtual B
{
	......	
};

22、赋值兼容规则:可以将公有派生类的对象赋值给基类对象,反之不允许。

23、赋值兼容与限制归纳:
1)公有继承的派生类对象能赋值给基类对象,私有或保护继承的派生类对象不可以赋值给基类对象。

2)公有继承的派生类对象赋值给基类对象时,系统将派生类对象中从基类继承来的成员赋值给基类对象。

3)不能将基类对象赋值给派生类对象,因为派生类对象是基类对象的扩充,若能赋值,则派生类对象扩充的部分将无值可赋。

4)在公有继承的情况下,可将派生类对象的地址赋给基类的指针变量。
例:

Point *ptr=&line;

5)在公有继承的情况下,派生类对象可初始化基类的引用。
例:

Point &refp=line;

24、相关题目

题目一:定义Person类并派生出Student和Teacher类

题目二:定义Date类和Time类并派生出DateTime类

上面两题是继承和派生的比较好的题目,综合性较强,可以好好研究~

你可能感兴趣的:(------C++------,#,程序设计基础)