类型兼容---子类的对象可以给父类指针赋值

一个公有派生类的对象在使用上可以被当做基类的对象,反之禁止。

也就是说:1.派生类的对象可以赋值给基类的对象

如 

B:public A    
A a;
B b;
a = b;//语法上是允许的

2、派生类的对象可以初始化基类的引用:

void f(A &a)
{}

int main()
{
B b;
f(b);
}

3、指向基类的指针可以指向派生类

A *p;
p = new B();

例子:

#include <iostream>
using namespace std;

class B0    //基类B0声明
{ public:
    void display(){cout<<"B0::display()"<<endl;}    //公有成员函数
};
class B1: public B0    
{
 public:
    void display(){cout<<"B1::display()"<<endl;}    
};
class D1: public B1    
{
public:
    void display(){cout<<"D1::display()"<<endl;}    
};
void fun(B0 *ptr)    
{    ptr->display();    //"对象指针->成员名"  
}
int main()    //主函数
{    B0 b0;    //声明B0类对象
    B1 b1;    //声明B1类对象
    D1 d1;    //声明D1类对象
    B0 *p;    //声明B0类指针
    p=&b0;    //B0类指针指向B0类对象
    fun(p);
    p=&b1;    //B0类指针指向B1类对象
    fun(p);
    p=&d1;    //B0类指针指向D1类对象
    fun(p);
}
结果:
B0::display()
B0::display()
B0::display()

注意:尽管是将派生的对象赋值给了基类的指针,但全部调用的基类的函数,因为在子类中的同名函数会被基类同名函数覆盖。
原文地址:https://www.cnblogs.com/defen/p/5344834.html