#include<iostream>
using namespace std;
/*
子类对象可以当作父类对象使用
子类对象可以直接赋值给父类对象
子类对象可以直接初始化父类对象
父类指针可以直接指向子类对象
父类引用可以直接引用子类对象
*/
class Parent
{
public:
void printP()
{
cout << "a = " << this->a << endl;
}
int a;
};
class Child :public Parent
{
public:
void printC()
{
cout << "b = " << this->b << endl;
}
int b;
};
//好处:一个接口解决所有家族问题
void myPrint(Parent *pp)
{
pp->printP();
}
int main()
{
//Parent p;
//Child c = p;//p对象填充不满c对象空间。
Child c1;
Parent p1 = c1;//c对象所占用的内存空间大于等于p对象所占空间,能够填充满p对象所需空间
p1 = c1;
c1.printP();//c能够当做父类p来使用,即子类可以使用类的方法
Parent *pp = NULL;
Child *cp = NULL;
Parent p2;
Child c2;
pp = &c2;//c内存布局能够满足父类指针的全部需求,可以用子类的对象地址给父类指针赋值。
pp->a;
pp->printP();
return 0;
}
总结:
子类对象可以当作父类对象使用
子类对象可以直接赋值给父类对象
子类对象可以直接初始化父类对象
父类指针可以直接指向子类对象
父类引用可以直接引用子类对象
好处:一个接口解决所有家族问题
Parent p1 = c1;//c对象所占用的内存空间大于等于p对象所占空间,能够填充满p对象所需空间
c1.printP();//c能够当做父类p来使用,即子类可以使用类的方法
pp = &c2;//c内存布局能够满足父类指针的全部需求,可以用子类的对象地址给父类指针赋值。