类型兼容性原则
类型兼容原则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样公有派生类就具备了基类的所有功能。凡是基类能解决的问题。公有派生类都可以解决。类型兼容原则中所指的替代包括以下情况
1)子类对象可以当作父类对象使用
2)子类对象可以直接赋值给父类对象
3)子类对象可以直接初始化父类对象
4)父类指针可以直接指向子类对象
5)父类引用可以直接引用子类对象
在替代之后,派生类对象就可以作为基类的对象
#include<iostream>
using namespace std;
class parent
{
public:
void printfP()
{
cout << "我是爸爸"<< endl;
}
};
class child :public parent
{
public:
void printfC()
{
cout << "我是儿子"<< endl;
}
};
void printfM(parent *p)
{
cout <<"我是printfM()" << endl;
}
void printfM1(parent &p)
{
cout << "我是printfM1"<< endl;
}
/*类型兼容原则中所指的替代包括以下情况
1)子类对象可以当作父类对象使用
2)子类对象可以直接赋值给父类对象
3)子类对象可以直接初始化父类对象
4)父类指针可以直接指向子类对象
5)父类引用可以直接引用子类对象
*/
void main()
{
parent p1;
p1.printfP();
child c1;
c1.printfC();
c1.printfP();//子类对象调用父类中的函数
//赋值兼容性原则
//1、基类指针(引用) 指向对象
parent *p = NULL;
p = &c1;
p->printfP();
//指针做函数参数
printfM(&p1);
printfM(&c1);
//引用做函数参数
printfM1(p1);
printfM1(c1);
//引用做函数参数
//第二层含义 用子类对象去初始化父类对象
parent p3 = c1;
system("pause");
}
使用,但是只能使用从基类继承的成员。类型兼容规则是多态性的重要基础之一