原因:基类对象的指针操作派生类对象时,防止析构函数只调用基类的,而不调用派生类的

 

下面详细说明:

//基类
 
class A{
   public :
       A(){ cout<<"A构造函数"<<endl; }
       ~A(){cout<<"A被销毁了"<<endl;}
       void Do(){
           cout<<"A要做点什么"<<endl;
       }
};
//派生类
 
class B :public A{
    public :
        B(){ cout<<"B构造函数"<<endl;}
        ~B(){ cout<<"B被销毁了"<<endl;}
        void Do(){ cout<<"B要做点什么"<<endl;}
};

 

(1)派生类 指针=new 派生类;

         B      *p   =new B;      那么就会执行基类构造函数,派生类构造函数

         p->Do();   通过派生类指针可以调用派生类的成员函数

         delete p;     先调用派生类析构函数,在调用基类构造函数

         

#include<iostream>
using namespace std;
//基类
 
class A{
   public :
       A(){ cout<<"A构造函数"<<endl; }
       ~A(){cout<<"A被销毁了"<<endl;}
       void Do(){
           cout<<"A要做点什么"<<endl;
       }
       
};
//派生类
 
class B :public A{
    public :
        B(){ cout<<"B构造函数"<<endl;}
        ~B(){ cout<<"B被销毁了"<<endl;}
        void Do(){ cout<<"B要做点什么"<<endl;}
};
int main(){
    B *p=new B;
    p->Do();
    delete p;
    return 0;
}
派生类指针操作派生类成员函数

相关文章: