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
- <C++>析构函数、虚析构函数和构造函数
- 构造函数和析构函数【c++】
- c++-构造函数与析构函数
- C++-构造函数,析构函数
- [c++]构造函数和析构函数
- C++--构造函数与析构函数
- 【C#】构造函数和析构函数
- 【C++】构造函数和析构函数
- 【C++】构造函数和析构函数
- C++(构造函数&&析构函数)
- 【C#】构造函数&析构函数
- 【c++】构造函数与析构函数
- 【C++】类构造函数 & 析构函数
- C++:构造函数和析构函数
- C++:构造函数与析构函数
- 【C++】构造函数 and 析构函数
- C++:构造函数,析构函数及友元函数
- 【C++】构造函数 析构函数 虚函数
- Java 8 彻底改变数据库访问
- 南邮OJ 2027 操作序列
- Cocos2d-x 框架概要说明
- 打印当前日期和时间,记录微秒级时间日志的C程序
- Linux服务器网络开发模型
- C++ 析构函数 构造函数 虚析构函数
- 让你提前认识软件开发(7):变量及函数的命名
- 以后这里就是我大脑的小硬盘啦
- 控制台中输出宽字符
- 动态设置表结构方案(一)
- 第三章作业
- 算法竞赛入门经典训练指南-P4例题3 分金币问题总结
- MFC文档视图(一):简介
- Android开发之自动补全文本框