内容源自: 传智播客
类型兼容性规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能够解决的问题,公有派生类都可以解决。类型兼容性原则包含下面几种情况:
1. 子类对象可以当做父类对象使用。
2. 子类对象可以直接赋值给父类对象
3, 子类对象可以直接初始化父类对象
4. 父类指针可以直接指向子类对象
5. 父类引用可以直接指向子类对象
在替代之后, 派生类对象就可以作为基类对象使用,但是只能使用从基类继承的成员。 类型兼容性规则是多态的重要基础之一。
#include<iostream>
using namespace std;
// c++中的类型兼容性原则:
class Parent {
public:
void printP() {
cout << "我是父类..." << endl;
}
Parent() {
cout << "我是父类的构造函数" << endl;
}
//父类的拷贝构造函数
Parent(const Parent& obj) {
cout << "我是拷贝函数" << endl;
}
private:
int a;
};
class Child: public Parent
{
public:
void printC() {
cout << "我是子类...." << endl;
}
private:
int c;
};
void howToPrint(Parent* p) {
p->printP();
}
void howToPrint1(Parent p) {
p.printP();
}
int main() {
Parent p1;
p1.printP();
Child c1;
c1.printC();
c1.printP(); //子类可以调用父类的成员函数
//类型兼容性原则
//1-1 基类指针(引用)指向子类对象
Parent* p = NULL;
p = &c1;
p->printP();
//1-2 指针做函数参数
howToPrint(&p1);
howToPrint(&c1);
//1-3 引用做函数参数
howToPrint1(p1);
howToPrint1(c1);
// 第二层含义:
// 可以让子类对象 初始化父类对象
// 子类就是一种特殊的父类
Parent p3 = c1; //子类特殊化父类, 执行拷贝构造函数
system("pause");
}