|
#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===============
|