C++ 析构函数 构造函数 虚析构函数

来源:互联网 发布:linux php 写入权限 编辑:程序博客网 时间:2024/06/04 18:20

c++的类作为基类时, 需要定义虚析构函数,这样便可以准确的调用子类的析构函数,否则在用基类的指针引用子类对象时,就只会调用基类的虚构函数

构造子类对象时的构造函数调用顺序:基类的构造函数,嵌入对象的构造函数,子类自身的构造函数

局部的对象析构时按照与声明相反的顺序执行

虚构造函数没意义


例:

#include <iostream>#include <stdio.h>using namespace std;class PARENT{public:PARENT(){printf("constructor: I am parent\n");}virtual ~PARENT(){printf("destructor: I am parent\n");}void print() {printf("print: I am parent\n");}};class CHILD: public PARENT{public:CHILD(){printf("constructor: I am child\n");}~CHILD(){printf("destructor: I am child\n");}void print() {printf("print: I am child\n");}};int calc(int m, int n);int main(){PARENT po;CHILD co;PARENT *p;CHILD *p1;p1 = new CHILD;p = p1;printf("%x, %x\n", p1, p);po.print();co.print();p->print();delete p;return 0;}
执行结果:
constructor: I am parent
constructor: I am parent
constructor: I am child
constructor: I am parent
constructor: I am child
1314a0, 1314a0
print: I am parent
print: I am child
print: I am parent
destructor: I am child  // 释放 p 指向的对象; 若基类的析构函数virtual ~PARENT()没有virtual,则不会调用子类的析构函数,也就不会打印这句话

destructor: I am parent // 释放 p 指向的对象;
destructor: I am child // 释放CHILD对象 co;

destructor: I am parent // 释放CHILD对象 co;
destructor: I am parent  // 释放PARENT对象 po;

0 0
原创粉丝点击