类型兼容性规则: 在需要基类对象的任何地方,都可以用公有派生类的对象来替代
其替代主要包括一下情况
1)派生类的对象可以赋值给基类的对象
2)派生类的对象可以初始化基类的引用
3)派生类对象的地址可以赋给指向基类的指针(这里常用)
下面将以实例一一介绍:
类的实现部分:
class B
{……}
class D :public B
{……}
类的调用部分:
B b1,*pb1;
D d1;
1)派生类赋值给基类对象:b1=d1;
2)派生类对象初始化基类对象的引用:B& b=d1;
3)派生类对象的地址也可以赋给指向基类的指针:pb1=&d1;
在替代之后,派生类对象就可以作为基类的对象使用,但只能使用基类继承的成员
实例:
#include<iostream>
using namespace std;
class 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;
B1 b1;
D1 d1;
B0 *p;
p=&b0;
fun(p);
p=&b1;
fun(p);
p=&d1;
fun(p);
return 0;
}
运行结果:
B0::display()
B0::display()
B0::display()
类型兼容性事多态性的重要基础之一,
这样通过“对象名.成员名”或者“对象名->成员名”的方式,就应该可以访问到个派生类中新添加的同名成员