#includeusing namespace std; 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"); } void playObj() { //Parent p1; // 没有基类哪有派生类 Child c1; // 子类先调用父类的构造函数,然后再调用子类自己的构造函数 } void main() { playObj(); system("pause"); }



