#include "iostream"
using namespace std;
using namespace std;
class Parent
{
public:
void printp()
{
cout << "I am the father" << endl;
}
{
public:
void printp()
{
cout << "I am the father" << endl;
}
protected:
private:
};
class Child :public Parent
{
public:
void printc()
{
cout << "I am the child " << endl;
}
private:
};
class Child :public Parent
{
public:
void printc()
{
cout << "I am the child " << endl;
}
protected:
private:
};
private:
};
/* 兼容性原则 所指的替代包括以下几种情况
1 子类对象可以当父类对象使用
2 子类对象可以直接复制父类对象
3 子类对象可以直接初始化父类对象
4 父类指针可以直接指向子类对象
5 父类应用可以直接引用子类对象*/
1 子类对象可以当父类对象使用
2 子类对象可以直接复制父类对象
3 子类对象可以直接初始化父类对象
4 父类指针可以直接指向子类对象
5 父类应用可以直接引用子类对象*/
void howtoPrint(Parent *p)
{
p->printp();
}
void howtoPrint2(Parent &p)
{
p.printp();
}
{
p->printp();
}
void howtoPrint2(Parent &p)
{
p.printp();
}
void main()
{
Parent p1;
p1.printp();
Child c1;
c1.printc();
c1.printp();
//赋值兼容性原则
// 1-1 基类指针 (引用) 指向子类对象
// 1-1 基类指针 (引用) 指向子类对象
Parent * p = NULL;
p = &c1;
p->printp(); //只能指向父类的函数
//p->printc();
//1-2 指针做函数参数
howtoPrint(&p1);
howtoPrint(&c1);
//1-3 引用做函数参数
howtoPrint2(p1);
howtoPrint2(c1);
p = &c1;
p->printp(); //只能指向父类的函数
//p->printc();
//1-2 指针做函数参数
howtoPrint(&p1);
howtoPrint(&c1);
//1-3 引用做函数参数
howtoPrint2(p1);
howtoPrint2(c1);
//2-1 子类对象可以直接初始化父类对象
Parent p2 = c1;
Parent p2 = c1;
system("pause");
return ;
}
return ;
}