父类和子类(指针,对象,引用 ,盲点)


#include<iostream> using namespace std; class Father { public: Father() { cout << "我是父类构造函数"; } ~Father() { cout << "我是父类析构函数 "; } void printF() { cout << "我是父类的函数"; } public: int f; protected: }; class Child: public Father { public: Child() { cout << "我是子类构造函数"; } ~Child() { cout << "我是子类析构函数 "; } void printC() { cout << "我是子类的函数"; } public: int c; protected: }; int main() { Father f1; //调用父类的构造函数 Child c1;//先调用 父类的构造函数 再调用子类的构造函数。 cout << endl; cout << "f1.printF() :"; f1.printF(); //父类的对象调用父类的函数,显示父类的函数 cout << endl << "c1.printC() ::"; c1.printC();//子类的对象调用子类的函数 ,显示子类的函数 cout << endl << "c1.printF() ::"; c1.printF();//子类的对象调用父类的函数 ,显示父类函数。 f1.f = c1.f; cout <<" 我是漂亮的分割线----------------------"<< endl; Father *f2; Child c2; f2 = &c2; f2->printF(); //显示调用父类的函数,但是这如果是虚函数则显示是调用的是子类的函数 system("pause"); }

子类对象可以当作父类对象使用

         子类对象可以直接赋值给父类对象

         子类对象可以直接初始化父类对象

      子类对象可以使用父类的成员和函数。

         父类指针可以直接指向子类对象(这里仅仅指的是子类继承的父类的对象)

         父类引用可以直接引用子类对象(这里仅仅指的是子类继承的父类的对象)

所以上面两句和线面这一句并不矛盾。

子类对象可以用父类的所有东西,只是对错而已,而父类对象不能用子类的任何东西。

而子类的指针和引用就不可以指向父类对象

原文地址:https://www.cnblogs.com/xiaochige/p/7538099.html