c++中的构造函数和析构函数
构造函数: C++提供了构造函数(constructor)来处理对象的初始化。在建立对象时自动执行。构造函数的名字必须与类名同名,它不具有任何类型,不返回任何值。
构造函数总结:
①构造函数是C++中用于初始化对象状态的特殊函数。
② 构造函数在对象创建时自动被调用(默认调用),隐身调用。
③构造函数和普通成员函数都遵循重载规则。
④拷贝构造函数是对象正确初始化的重要保证,必要的时候,必须手工编写拷贝构造函数。
构造函数的调用:
自动调用:一般情况下C++编译器会自动调用构造函数
手动调用:在一些情况下则需要手工调用构造函数
构造函数有三种:
有参构造函数、默认构造函数、拷贝构造函数。
析构函数:析构函数(destructor)也是一个特殊的成员函数,它的作用与构造函数相反,它的名字是类名的前面加一个“~”符号,析构函数是与构造函数作用相反的函数。
析构函数总结:
①如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前 自动执行析构函数。
②static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。
③如果定义了一个全局对象,则在程序的流程离开其作用域时(如main函数结束或调用exit函数) 时,调用该全局对象的析构函数。
④如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。
有参构造函数的三种调用方法:
class Test
{
public://有参构造函数Test(int a){m_a = a;}//无参数构造函数Test(){m_a = 0;}//赋值构造函数(copy构造函数)Test(const Test &obj){}
public:void print(){cout<<"m_a"<<m_a<<endl;}
protected:
private:int m_a;
};
void main()
{Test t1(10); //c++编译器自动调用这个类的有参构造函数t1.print();Test t2 = 20; //c++编译器自动调用这个类的有参构造函数t2.print();Test t3 = Test(30);//程序员手工的调用构造函数进行对象初始化t3.print();
}
构造函数和析构函数调用规则:
1 当类中没有定义任何一个构造函数时,c++编译器会提供无参构造函数和拷贝构造函数
2 当类中定义了任意的非拷贝构造函数(无参、有参),c++编译器不会提供无参构造函数
3 当类中定义了拷贝构造函数时,c++编译器不会提供无参数构造函数
4 默认拷贝构造函数成员变量简单赋值
总结:只要你写了构造函数,那么你必须用。
析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。析构函数不返回任何值,没有函数类型,也没有函数参数。因此它不能被重载。 一个类可以有多个构造函数,但只能有一个析构函数。当然,析构函数也可被用来执行用户希望在最后一次使用对象之后所执行的任何操作,例如输出有关的信息。如果用户没有定义析构函数,C++编译系统会自动生成一个析构函数,实际上什么操作都不进行。
在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反: 最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。
转载请注明出处: http://blog.csdn.net/lsh_2013/article/details/45441901
c++中的构造函数和析构函数相关推荐
- php中的构造函数和析构函数,php 中构造函数和析构函数
构造函数: 在对象实例化时被调用,一个类中只能有一个构造函数,在类中起初始化的作用. 析构函数: 在对象结束时被自动调用. 话不多说,用一段代码来说明两者的区别: //定义一个类 class Pers ...
- C++:继承中的构造函数和析构函数
C++:继承中的构造函数和析构函数 1.继承中构造函数和析构函数调用顺序 a.调用父类构造函数: b.调用其他成员的构造函数: c.调用子类构造函数: d.析构调用顺序相反. #include < ...
- 7-15 单继承中的构造函数与析构函数 (10 分)
7-15 单继承中的构造函数与析构函数 (10 分 编写代码实现一个表示点的父类Dot和一个表示圆的子类Cir,求圆的面积. Dot类有两个private数据成员 float x,y; Cir类新增一 ...
- C++中的构造函数VS析构函数
1.构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行.构造函数的名称与类的名称的完全相同的,并且不会返回任何数据类型,也不会返回void.构造函数用于为某些成员变量设置初 ...
- 【C++深度剖析教程33】C++中的构造函数与析构函数是否可以为虚函数
加qq1126137994 微信:liu1126137994 一起学习更多技术!!! 问题一:构造函数与析构函数可以成为虚函数么? 答案: 1.构造函数不可以成为虚函数 因为在构造函数执行结束后,虚函 ...
- C++:51---继承中的构造函数、析构函数、拷贝控制一系列规则
一.继承中的构造函数 根据构造函数的执行流程我们知道: 派生类定义时,先执行基类的构造函数,再执行派生类的构造函数 拷贝构造函数与上面是相同的原理 二.继承中的析构函数 根据析构函数的执行流程我们知道 ...
- C++学习笔记day47-----C++98-继承中的构造函数,析构函数,拷贝构造函数,拷贝赋值函数,多重继承,虚继承
继承中的构造函数 当通过一个子类创建一个新的对象时,编译器会根据子类在初始化表中指明的基类的初始化方式去调用基类相应的构造函数.如果子类的初始化表中,并没有指明基类的初始化方式,编译器将会调用基类的无 ...
- 初识C++中的构造函数和析构函数
构造函数 作用: 主要用来进行对象的初始化操作 需要注意的几个点: 函数名与类名相同 没有返回值 也不写void 构造函数可以有参数(有参构造函数),可以发生重载,也可以没有参数(默认构造函数) 创建 ...
- c语言构造函数和析构函数,深入解析C++中的构造函数和析构函数
构造函数:在类实例化对象时自动执行,对类中的数据进行初始化.构造函数可以从载,可以有多个,但是只能有一个缺省构造函数. 析构函数:在撤销对象占用的内存之前,进行一些操作的函数.析构函数不能被重载,只能 ...
最新文章
- 如何用Linux的at命令安排一个任务
- python设置环境路径_window10配置python虚拟环境的路径
- [Oracle] “表中有数据,但select count(*)的结果为0”问题的解决办法
- 【漫谈数据仓库】 如何优雅地设计数据分层
- 20145227《信息安全系统设计基础》第一周学习总结
- 多线程读取文件File
- Spring Cloud Alibaba 深度解密!
- readline,readlines,read函数
- mac pro制作iso系统光盘
- Python基础之字符串
- 【网页模板】Bootstrap免费模板
- 蚂蚁课堂二期视频(每特学院二期)
- matlab10的阶层怎么输入,matlab阶乘和程序
- 南京年薪10万以上软件人才买房买车可获退税
- Forward(请求转发)和Redirect(重定向)的比较
- Linux文件系统目录结构详解
- 台湾评论大陆量子计算机,台湾媒体盛赞大陆工业科研水平 称台湾人对大陆懵懂无知...
- waves效果器_Waves混音指南:疯狂、混乱、创造性的失真,用Berzerk失真开脑洞!...
- python怎么制作游戏图片_Python游戏引擎开发(二):显示图片
- Android如何修改使用默认使用GPS提供时间
热门文章
- matlab2c使用c++实现matlab函数系列教程-intersect函数
- 浅析微信支付:1前篇大纲
- 14.链表中倒数第k个结点
- 分治法的经典问题——大整数相乘
- web自动化测试 Selenium2 Java自动化测试实战9_3
- angularJS使用编写KindEditor,UEidtor,jQuery指令,双重绑定
- ubuntu查看文件大小
- Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释...
- quake3中求1/sqrt(x)的算法源代码
- 用asp.net程序备份或还原SQLServer