C++语言笔记系列之十六——赋值兼容规则&多继承的二义性
1.赋值兼容规则
(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)若基类中同名成员和派生类同名成员參数个数不同或者类型不同也不会出现二义性。