C++子类析构问题

2014-11-23 20:25:35 · 作者: · 浏览: 14

[cpp]
创建基类class base

创建基类class base[cpp]
#ifndef __base_h
#define __base_h
class base
{
public:
base(int a,int b);
~base();
public:
int m;
int n;
};
#endif

#ifndef __base_h
#define __base_h
class base
{
public:
base(int a,int b);
~base();
public:
int m;
int n;
};
#endif[cpp]
**************base.cpp***************

**************base.cpp***************[cpp] view plaincopyprint
#include "stdafx.h"
#include "base.h"

base::base(int a, int b)
{
m=a;
n=b;
printf("gou zao ji lei\n");
}

base::~base()
{
printf("xi gou ji lei\n");
}

#include "stdafx.h"
#include "base.h"

base::base(int a, int b)
{
m=a;
n=b;
printf("gou zao ji lei\n");
}

base::~base()
{
printf("xi gou ji lei\n");
}

**************frombase.h************


创建子类frombase继承基类class base

[cpp]
#ifndef __use_h
#define __use_h

#include "base.h"
class frombase:public base
{
public:
frombase(int q,int w,int e,int r);
~frombase();
public:
int x;
int y;
};
#endif

#ifndef __use_h
#define __use_h

#include "base.h"
class frombase:public base
{
public:
frombase(int q,int w,int e,int r);
~frombase();
public:
int x;
int y;
};
#endif

************frombase.cpp************

[cpp]
#include "stdafx.h"
#include "use.h"

frombase::frombase(int q,int w,int e,int r):base(e,r)
{
x=q;
y=w;
}
frombase::~frombase()
{
printf("xi gou frombase\n");
}

#include "stdafx.h"
#include "use.h"

frombase::frombase(int q,int w,int e,int r):base(e,r)
{
x=q;
y=w;
}
frombase::~frombase()
{
printf("xi gou frombase\n");
}
C++ 控制台程序测试 11

[cpp]
#include "stdafx.h"
#include "base.h"
#include "use.h"

//int _tmain(int argc, _TCHAR* argv[])
int main()
{
int aa =1;
int bb =2;
int cc = 3;
int dd = 4;
base* _base;
frombase * _frombase;
_base = (base*)new frombase(aa,bb,cc,dd);
printf("%d %d\n",_base->m,_base->n);
delete _base;
getchar();
return 0;
}

执行结果::

#include "stdafx.h"
#include "base.h"
#include "use.h"

//int _tmain(int argc, _TCHAR* argv[])
int main()
{
int aa =1;
int bb =2;
int cc = 3;
int dd = 4;
base* _base;
frombase * _frombase;
_base = (base*)new frombase(aa,bb,cc,dd);
printf("%d %d\n",_base->m,_base->n);
delete _base;
getchar();
return 0;
}

执行结果::构造基类base

构造子类frombase

3 4

析构基类 base


C++ 控制台程序测试 22

[cpp]
#include "stdafx.h"
#include "base.h"
#include "use.h"
int main()
{
int aa =1;
int bb =2;
int cc = 3;
int dd = 4;
base* _base;
frombase * _frombase;
_base = (base*)new frombase(aa,bb,cc,dd);
printf("%d %d\n",_base->m,_base->n);
_frombase = (frombase*)_base;
printf("%d %d %d %d\n",_frombase->m,_frombase->n,_frombase->x,_frombase->y);
delete _frombase;
getchar();

return 0;
}
执行结果:::

#include "stdafx.h"
#include "base.h"
#include "use.h"
int main()
{
int aa =1;
int bb =2;
int cc = 3;
int dd = 4;
base* _base;
frombase * _frombase;
_base = (base*)new frombase(aa,bb,cc,dd);
printf("%d %d\n",_base->m,_base->n);
_frombase = (frombase*)_base;
printf("%d %d %d %d\n",_frombase->m,_frombase->n,_frombase->x,_frombase->y);
delete _frombase;
getchar();

return 0;
}
执行结果:::构造基类 base

构造子类 frombase

3 4

3 4 1 2

析构子类 frombase
析构基类 base

总结:当子类的对象直接释放时:

先调用子类自身的析构函数 再调用基类的析构函数

当子类的对象被强制转换为基类类型时:

直接调用基类的析构函数,忽略掉子类的析构函数