内蒙古 其他
IT茶座,IT公司查询    
[搜索] [Google 站内搜索] 添加新公司    
一个关于虚拟析构函数测试

#include 'stdafx.h'

 

 

#include <iostream>

using namespace std;

class BaseClass

{

public:

       BaseClass()

       {

              ++nAllClassNum;

       }

      

//     virtual ~BaseClass()

//     {

//            --nAllClassNum;

//     }

       ~BaseClass()

       {

              --nAllClassNum;

       }

       static int nunAllClass()

       {

              return nAllClassNum;

       }

private:

       static int nAllClassNum;//所有类的引用计数

};

 

 

class DeriveClass:public BaseClass

{

public:

       DeriveClass()

       {

              ++nDeriveClassNum;

       }

       ~DeriveClass()

       {

              --nDeriveClassNum;

       }

       static int nunDevireClass()

       {

              return nDeriveClassNum;

       }

private:

       static int nDeriveClassNum;//派生类引用计数

};

int BaseClass::nAllClassNum=0;

int DeriveClass::nDeriveClassNum=0;

int main()

{

       cout<<'一般测试:'<<endl;

       BaseClass a;

       cout<<'BaseClass a;->'<<'基类对象的数目:'<<BaseClass::nunAllClass()<<endl;

       BaseClass b;

       cout<<'BaseClass b;->'<<'基类对象的数目:'<<BaseClass::nunAllClass()<<endl;

       BaseClass c;

       cout<<'BaseClass c;->'<<'基类对象的数目:'<<BaseClass::nunAllClass()<<endl;

       DeriveClass d;

       cout<<'DeriveClass d;->'<<'基类对象的数目:'<<BaseClass::nunAllClass()<<endl;

       cout<<'DeriveClass d;->'<<'基派生类对象的数目:'<<DeriveClass::nunDevireClass()<<endl;

      

    cout<<'==============================================================='<<endl<<endl;

 

       cout<<'基类指针测试:'<<endl;

       cout<<'新建一个指向派生类的基类指针:'<<endl<<'BaseClass* pDeriveClass=new DeriveClass;'<<endl;

       BaseClass* pDeriveClass=new DeriveClass;

   

    cout<<'目前基类对象的数目  :'<<BaseClass::nunAllClass()<<endl;

       cout<<'目前派生类对象的数目:'<<DeriveClass::nunDevireClass()<<endl;

       delete pDeriveClass;

       pDeriveClass=NULL;

       cout<<'删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用'<<endl<<'delete pDeriveClass;'<<endl;;

    cout<<'目前基类对象的数目  :'<<BaseClass::nunAllClass()<<endl;

       cout<<'目前派生类对象的数目:'<<DeriveClass::nunDevireClass()<<endl;

       cout<<'===================Test Over==============='<<endl;

    return 0;

}

 

运行结果:一般测试:

BaseClass a;->基类对象的数目:1

BaseClass b;->基类对象的数目:2

BaseClass c;->基类对象的数目:3

DeriveClass d;->基类对象的数目:4

DeriveClass d;->基派生类对象的数目:1

===============================================================

 

基类指针测试:

新建一个指向派生类的基类指针:

BaseClass* pDeriveClass=new DeriveClass;

目前基类对象的数目  :5

目前派生类对象的数目:2

删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用

delete pDeriveClass;

目前基类对象的数目  :4

目前派生类对象的数目:2

===================Test Over===============

 

 

而把构造函数定义为虚拟函数

则运行结果为

一般测试:

BaseClass a;->基类对象的数目:1

BaseClass b;->基类对象的数目:2

BaseClass c;->基类对象的数目:3

DeriveClass d;->基类对象的数目:4

DeriveClass d;->基派生类对象的数目:1

===============================================================

 

基类指针测试:

新建一个指向派生类的基类指针:

BaseClass* pDeriveClass=new DeriveClass;

目前基类对象的数目  :5

目前派生类对象的数目:2

删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用

delete pDeriveClass;

目前基类对象的数目  :4

目前派生类对象的数目:1

===================Test Over===============


关于我们 | 联系我们 | 服务条款 | 帮助中心 | 公司评论 | 会员注册
沪ICP证041070号 Copyright©2007 ITCups All rights Reserved