#include <iostream>
using namespace std;
/* 派生类和基类的赋值兼容性原则:
* 子类和父类的赋值兼容性原则:
* 1,子类对象可以当作父类对象使用
* 2,子类对象可以直接赋值对父类对象
* 3,子类对象可以直接初始化父类对象
* 4,父类指针可以直接指向子类对象
* 5,父类引用可以直接引用子类对象
*
* 总结:子类就是特殊的父类(base* p = &child;)
*/
class Parent {
public:
Parent() {
cout << "父类的构造函数" << endl;
}
void printP() {
printf("我是父类函数printP()!\n");
}
~Parent() {
cout << "父类析构函数" << endl;
}
protected:
int a;
int b;
private:
};
class Child : public Parent {
public:
Child() {
a = 0; b = 0; c = 0;
cout << "子类的构造函数" << endl;
}
void printC() {
printf("我是子类函数printC()!\n");
}
~Child() {
cout << "子类析构函数" << endl;
}
protected:
private:
int c;
};
void toPrint(Parent* p) {
p->printP();
}
void toPrint(Parent& p) {
p.printP();
}
// 子类是特殊的父类,可以把子类当作父类用
// 子类也叫派生类
// 派生类是一种特殊的基类。
void main01() {
Parent p1;
p1.printP();
Child c1;
c1.printC();
c1.printP();
Parent* base = NULL;
base = &c1; // 赋值兼容性原则:可以把子类对象赋值给基类,子类就是一种特殊的父类
base->printP();
Parent& myp = c1;
myp.printP();
// 测试基类指针做函数参数
toPrint(&p1);
toPrint(&c1);
// 测试基类引用做函数参数
toPrint(p1);
toPrint(c1);
// 子类对象初始化父类
Parent p3 = Child();
p3.printP();
Parent p4 = c1;
p4.printP();
system("pause");
}
/*
* 继承中的对象模式:
* 1,在子类对象构造时,需要调用父类构造函数对象继承得来的成员进行初始化
* 2,在子类对象析构时,需要调用父类析构函数对其继承得来的成员进行清理
*/
void playObj() {
//Parent p1;
// 没有基类哪有派生类
Child c1; // 子类先调用父类的构造函数,然后再调用子类自己的构造函数
}
void main() {
playObj();
system("pause");
}
C++ 派生类和基类的赋值兼容性原则
最新推荐文章于 2022-10-27 00:13:01 发布