【c++】构造函数与析构函数
来源:互联网 发布:国家卫生网络信息直报 编辑:程序博客网 时间:2024/04/27 21:29
一、构造函数
C++提供构造函数来处理对象的初始化,构造函数是一种特殊的成员函数,与其他的成员函数不同,不需要用户来调用他,而是在建立对象时自动执行。
它的特点是:函数名和类名相同,没有返回值,可以重载
如果程序中未声明,则系统自动产生出一个默认的构造函数,默认的构造函数时不带参数的。比如:Student t;这是就会调用默认的构造函数。在定义对象时指定成员的初始值时,系统不会自动生成一个有参的构造函数,需要自己生成。
由结果可知:全局对象的构造函数优先于main函数执行
一、析构函数
析构函数也是一个特殊的成员函数,它的作用与构造函数相反,它的名字是类名前面加了一个“~”符号。
特点:没有参数,没有返回类型,不能被重载,如果没有定义析构函数,编译器会自动生成一个默认的析构函数。
当对象的生命周期结束的时候,会自动调用析构函数,具体来说一下情况会调用:
1)在函数中定义了一个局部对象,在函数结束时,对象释放会调用析构函数
2)静态局部对象在函数调用时对象并不释放,因此不调用析构函数,只在main函数结束或者调用exit函数结束程序时,才调用static局部变量的析构函数。
3)如果定义了一个全局变量,则在程序的流程离开其作用域(在main函数结束或者调用exit函数时),调用该全局的对象的析构函数。
4)用new运算符动态建立了一个对象,当用delete运算符释放该对象时,先释放该对象的析构函数。
析构函数的作用并不是删除对象,而是在撤销对象占用内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。
由结果可知:析构函数与构造函数的顺序相反。
析构函数的显示调用:t.~Test
一、转换构造函数
特点:单个参数的构造函数
作用:将任意类型转换为类类型,不能默认生成。
Test t = 10; //初始化,带一个参数的构造函数,这里的转换构造函数充当的是普通构造函数的作用。
t = 20;// 1、赋值,调用转换构造函数,将20这个整数转换成类类型,构建了一个临时对象Test(20);2、调用运算符重载,将临时对象赋值给t对象
使用explicit关键词,是转换构造函数失效!
一、初始化列表
·const成员的初始化只能在构造函数初始化列表中进行,必须在每个构造函数中初始化
·引用成员的初始化也只能在构造函数初始化列表中进行
·对象成员(对象所对应的类没有默认构造函数)的初始化,也只能在构造函
数初始化列表中进行,这里的对象成员是指类里面包含的类的对象成员。
代码示例:
#include<iostream>using namespace std;class Object{public: Object(int num = 0):num_(num),knum_(num) { cout << "object"<<num_<<"...."<<endl; } ~Object() { cout<<"~object"<<num_<<"....."<<endl; } void DisplayKnum() { cout<<"knum = "<<knum_<<endl; }private: int num_; int knum_;};int main(){ Object t; t.DisplayKnum();}
五、拷贝
#include<iostream>using namespace std;class Object{public: enum Result { success = 1, fail = -1 }; Object(int num = 0):num_(num),knum_(num) { cout << "object"<<num_<<"...."<<endl; } ~Object() { cout<<"~object"<<num_<<"....."<<endl; } void DisplayKnum() { cout<<"knum = "<<knum_<<endl; }private: int num_; int knum_;};int main(){ Object t; t.DisplayKnum(); cout<<Object::success<<endl;}
六、拷贝构造函数
功能:使用一个已经存在的对象来初始化一个新的同类型的对象
声明:只有一个参数并且该参数为该类对象的引用
如果类中没有说明拷贝构造函数,则系统自动生成一个缺省复制构造函数,作为该类的公有成员。
格式:Test(const Test& other)
代码例程:
- c++-构造函数与析构函数
- C++--构造函数与析构函数
- 【c++】构造函数与析构函数
- C++:构造函数与析构函数
- 【C++】初始化与清除(构造函数与析构函数)
- [C++]构造函数与析构函数讲解
- 构造函数与析构函数(C++)
- C语言的构造函数与析构函数
- C++_构造函数与析构函数
- 初识C#——构造函数与析构函数
- 关于Object-c 中的构造函数与析构函数
- C++(构造函数与析构函数)
- C/C++面试题:构造函数与析构函数
- 3.4构造函数与析构函数【C++】
- 【学习C++】学习C++ -> 构造函数与析构函数
- 构造函数和析构函数【c++】
- C++-构造函数,析构函数
- [c++]构造函数和析构函数
- 自定义控件
- 我们的cocos2dx-js规范
- zlib使用教程
- mybatis-generator-core使用
- 1+3+5+···+99=? oddsum
- 【c++】构造函数与析构函数
- 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
- Pixhawk原生固件PX4之commander函数
- mysql利用group_concat()合并多行数据到一行
- 欢迎使用CSDN-markdown编辑器
- toB产品经理的KPI
- 安卓应用层学习网站
- iOS App进入后台进程不死
- 101.hdu--2098--分拆素数和