首页 > 代码库 > C++语言笔记系列之十六——赋值兼容规则&多继承的二义性

C++语言笔记系列之十六——赋值兼容规则&多继承的二义性

1.赋值兼容规则
(1)派生类对象可以给基类对象赋值,这种情况下派生类对象将从基类继承的成员的值赋值给一个基类对象;但是不允许将一个基类的对象赋值给一个派生类。
(2)可以将派生类对象的地址赋给基类指针,使基类指针指向派生类对象,通过基类指针引用成员时只可以引用派生类从基类继承而来的成员,而不允许引用派生类的新成员。
(3)引用与指针相同。
2.多继承
(1)一个派生类从两个以上的基类中去继承。
(2)说明:
class 派生类名:继承方式 基类1, 继承方式 基类2,......
{派生类成员的表示};
(3)派生类构造函数的调用
A.调用
派生类名(总参数表):基类1(参数),基类2(参数),......子对象1(参数),子对象2(参数),......
{派生类构造}
注:同层基类构造函数的调用顺序与派生类构造函数中说明的基类构造顺序无关,而必须严格按照派生类定义时的继承顺序调用;同样,析构函数的调用顺序与构造函数的调用顺序严格相反。
3.多继承中的二义性
(1)派生类在继承基类时,每个成员函数的函数名最好唯一。
(2)若派生类在进行多继承时两个以上的基类中含有同名成员函数,且都可以访问,在派生类中对基类成员访问时,会出现访问时的二义性问题。
情况1:两个基类中有同名成员,派生类中也有同名函数,不会出现二义性,采取就近原则,访问派生类中的同名成员函数。
情况2:两个基类中有同名成员,且派生类中没有,在派生类中调用同名成员时出现二义性的问题。解决办法是:加类的作用域。
4.在以下三种情况中不会出现二义性:
(1)基类和派生类都有同名成员,不会出现二义性,会直接访问派生类。
(2)若派生类中没有,只有一个基类中有,这样也不会出现二义性。
(3)若基类中同名成员和派生类同名成员参数个数不同或者类型不同也不会出现二义性。