码迷,mamicode.com
首页 > 其他好文 > 详细

15.6纯虚函数与抽象类

时间:2016-05-01 16:21:09      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

纯虚函数:virtual
1.问题的产生: 通过基类的指针删除派生类对象时只调用基类的析构函数
例:
class CSon{     
  public: ~CSon() {   };
};
 
class CGrandson : CSon{
       public: ~CGrandson() {   };
}
 
int main(){      
CSon *p = new CGrandson;       delete p;       return 0;
}

2. 解决办法: 
把基类的析构函数声明为virtual,派生类的析构函数 virtual可以不进行声明;
通过 基类的指针删除派生类对象:
首先调用 派生类的析构函数 ?
然后调用 基类的析构函数 类如果定义了虚函数, 则最好将析构函数也定义成虚函数
 
 
 
例:
1.
class son{
      public:
         ~son() {
        cout<<"bye from son"<<endl;
       };
};
 
class grandson : public son{
       public:
         ~grandson(){
   cout<<"bye from grandson"<<endl; 
  };
};
 
int main(){
       son *pson; 
       pson=new grandson;
       delete pson;
       return 0;
  }
 
输出结果:  bye from son                              
  没有执行grandson::~grandson()!!!
 
2.
class son{
       public:
         virtual ~son() {
         cout<<"bye from son"<<endl;
   };
};
 
class grandson : public son{
       public:
         ~grandson(){
   cout<<"bye from grandson"<<endl;
   };
};
 
int main() {
   son *pson;
   pson= new grandson;
   delete pson;
   return 0;
}
 
输出结果: bye from grandson    bye from son
 
抽象类:含有纯虚函数的类
*只能作为基类来派生
*不能创建对象
*抽象类指针或引用->其派生类的对象
*抽象类构造和析构函数不能调用纯虚函数
*继承类如果把基类(抽象类)里所有的纯虚函数全部实现,继承类就不是抽象类了

15.6纯虚函数与抽象类

标签:

原文地址:http://www.cnblogs.com/by-dxm/p/5450624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!