赋值兼容规则

   注意:派生类是基类对象,反之不成立

在一定条件下,不同类型的数据之间可以进行类型转换,如可以将整型数据赋给双精度型变量。在赋值之前,先把整型数据转换成双精度型数据,然后再把它赋给双精度型变量。这种不同类型数据之间的自动转换和赋值,称为赋值兼容。在基类和派生类对象之间也存有赋值兼容关系,基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用其子类对象来代替。

例如,下面声明两个类:

class Base //声明基类Base  
{  
    ...  
};  
class Derived:public Base//声明基类Base的公有派生类Derived  
{  
    ...  
};  

 

根据赋值兼容规则,在基类base的对象可以使用的任何地方,都可以用派生类Derived的对象来替代,但只能使用从基类继承来的成员。具体表现在下面几个方面:

1.派生类对象可以赋值给基类对象,即用派生类对象中从基类继承来的数据成员,逐个赋值给基类对象的数据成员。例如

Base b;        //定义基类Base的对象b  
Derived d;     //定义基类Base的公有派生类Derived的对象d  
b=d;           //用派生类Derived的对象d对基类对象b赋值  
这种赋值的效果是对象b中所有数据成员都将具有对象d中对应的数据成员的值。
2.派生类对象可以初始化基类对象的引用
Base b;        //定义基类Base的对象b  
Derived d;     //定义基类Base的公有派生类Derived的对象d  
Base &br=d;    //定义基类Base的对象的引用br,并用派生类Derived的对象d对其初始化 

3.派生类对象的地址可以赋值给指向基类对象的指针。例如
Derived d;     //定义基类Base的公有派生类Derived的对象d  
Base *bp=&d;  //把派生类对象的地址&d赋给指向基类的指针bp,也就是说  
              //使指向基类对象的指针bp也可以指向派生类对象d  

附加:.如果函数的形参是基类对象或基类对象的引用,在调用函数时可以用派生类对象作为实参。
原文地址:https://www.cnblogs.com/enumhack/p/7474111.html