5个文件
Ctest.h Ctest.cpp CtestChile.h CtestChild.cpp main.cpp
Ctest.h
#ifndef _CTEST_H_
#define _CTEST_H_
#include <string>
#include <iostream>
using namespace std;
class Ctest
{
public:
Ctest();
virtual ~Ctest(); //THIS:~Ctest();
};
#endif
Ctest.cpp
#include "Ctest.h"
Ctest::Ctest()
{
}
Ctest::~Ctest(){
printf("Ctest release \r\n");
}
CtestChild.h
#ifndef _CTESTCHILD_H_
#define _CTESTCHILD_H_
#include <string>
#include <iostream>
#include "Ctest.h"
#include "CtestChild.h"
using namespace std;
class CtestChild: public Ctest<span style="white-space:pre"> </span>//这里的public不能少,若不写,则默认是private继承
{
public:
<span style="white-space:pre"> </span>CtestChild();
<span style="white-space:pre"> </span>~CtestChild();
};
#endif
#include "CtestChild.h"
CtestChild::CtestChild()
{<span style="white-space:pre"> </span>
}
CtestChild::~CtestChild(){
<span style="white-space:pre"> </span>printf("CtestChild release \r\n");
}
</pre><pre name="code" class="cpp">#include <iostream>
#include <string>
#include "Ctest.h"
#include "CtestChild.h"
using namespace std;
void main()
{
{
Ctest* CA = new CtestChild;
delete CA;
}
return;
}
编译结果:
若将Ctest.h中声明析构函数的地方改成 ~Ctest(),如注释所示
则编译结果:
so,结论:
父类在声明析构函数时候,一定要声明为虚函数,这样在利用多态性时候才不会出现内存泄露。
注意:
1.继承时候,默认是private继承。若需要public继承,则需要加上关键字private
2.指向父类的子类指针,在构造时,父类构造=》子类构造。
析构时,分两种情况:
(1)父类析构函数定义为虚函数,则先调用子类的析构函数再调用父类的析构函数
(2)父类析构函数不为虚函数时,则直接只调用父类的析构函数。(因为这本来就是只是一个父类的指针)