#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<<"一般测试:"<<en dl ;
BaseClass a;
cout<<"BaseClass a;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<en dl ;
BaseClass b;
cout<<"BaseClass b;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<en dl ;
BaseClass c;
cout<<"BaseClass c;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<en dl ;
DeriveClass d;
cout<<"DeriveClass d;->"<<"基类对象的数目:"<<BaseClass::nunAllClass()<<en dl ;
cout<<"DeriveClass d;->"<<"基派生类对象的数目:"<<DeriveClass::nunDevireClass()<<en dl ;
cout<<"==============================================================="<<en dl <<en dl ;
cout<<"基类指针测试:"<<en dl ;
cout<<"新建一个指向派生类的基类指针:"<<en dl <<"BaseClass* pDeriveClass=new DeriveClass;"<<en dl ;
BaseClass* pDeriveClass=new DeriveClass;
cout<<"目前基类对象的数目 :"<<BaseClass::nunAllClass()<<en dl ;
cout<<"目前派生类对象的数目:"<<DeriveClass::nunDevireClass()<<en dl ;
delete pDeriveClass;
pDeriveClass=NULL;
cout<<"删除基类指针,注意派生类的数目没有减少,说明派生类的构造函数没有被调用"<<en dl <<"delete pDeriveClass;"<<en dl ;;
cout<<"目前基类对象的数目 :"<<BaseClass::nunAllClass()<<en dl ;
cout<<"目前派生类对象的数目:"<<DeriveClass::nunDevireClass()<<en dl ;
cout<<"===================Test Over==============="<<en dl ;
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===============