C++类的构造函数、析构函数
来源:互联网 发布:学软件软件好的学校 编辑:程序博客网 时间:2024/06/06 11:06
C++为了实现对象的创建时的自动初始化和自动销毁,提供了两种特殊的函数:构造函数和析构函数
代码举例:
#include<iostream>#include"Test.h"using namespace std;class Date {public:Date():_year(1970),_month(1),_day(1){}Date(int y, int m, int d) :_year(y), _month(m), _day(d){}Date(int y) :_year(y){_month = 1;_day = 1;}//拷贝构造函数Date(const Date & d) :_year(d._year),_month(d._month),_day(d._day){}void Display(){cout << _year << "年" << _month << "月" << _day << "日" << endl;}~Date(){cout << "析构函数!" << endl;}/*bool operator==(const Date& d){return this->_year == d._year&&this->_month == d._month&&this->_day == d._day;}*/friend bool operator==(const Date &d1, const Date &d2);private:int _year;int _month;int _day;};bool operator==(const Date &d1, const Date &d2){return (d1._year == d2._year) && (d1._month == d2._month) && (d1._day == d2._day);}int main(){Date d1(2015);Date d2(d1);Date d3(2016);bool b = (d1 == d2);cout << b << endl;d1.Display();d2.Display();system("pause");return 0;}
一、构造函数:为对象的成员变量提供初始化
它有如下特点:
1.没有返回值
2.函数名和类名相同
3.允许重载
4.可以使用构造函数初始化列表
构造函数允许重载,所以有多种形式的构造函数
主要有:
(1)拷贝构造函数(复制构造函数):用一个类的对象来初始化这个类的另一个对象,若程序员没有自定义拷贝构造函数,编译器会根据成员变量的构造函数创建一个默认的构造函数。
Date(const Date & d) :_year(d._year),_month(d._month),_day(d._day){}
(2)无参构造函数:没有参数的或者参数都为默认值的构造函数,在调用时不需要参数。
Date():_year(1970),_month(1),_day(1){}
(3)带参构造函数:有参数的构造函数,拷贝构造函数就是一种带参构造函数
//3种都是
Date(int y, int m, int d) :_year(y), _month(m), _day(d){}Date(int y) :_year(y){_month = 1;_day = 1;}//拷贝构造函数Date(const Date & d) :_year(d._year),_month(d._month),_day(d._day){}
(4)默认构造函数:在没有显式定义任何构造函数的情况下,编译器会创建一个默认的构造函数
Date d1; //再没有定义构造函数时,隐式调用默认构造函数。
如果类内没有定义任何构造函数,则编译器会根据成员变量的默认构造函数来生成一个该类的默认构造函数
如果类内没有定义拷贝构造函数,则编译器会根据成员变量的拷贝构造函数来生成一个该类的拷贝构造函数
二、析构函数
析构函数用来在对象声明周期结束后来销毁对象的函数
析构对象有如下特点:
析构函数没有返回值
析构函数没有参数
对象在生命周期结束后自动调用析构函数销毁
析构函数函数名必须是“ '~'+类名 ”
析构函数代码:
<span style="white-space:pre"></span>~Date(){cout << "析构函数!" << endl;}析构函数一般用于对象在堆内开辟动态空间后,在对象被销毁前应该释放这些申请空间,析构函数就是做这种善后清理工作的。
析构函数在对象的生命周期结束之时,会被自动调用,在析构函数中写上需要操作的代码,则对象销毁时这些代码会被自动的执行,而不需要显式的调用。
这样会使程序员不必时时刻刻担心内存泄漏的问题,达到一种自动销毁的过程。
0 0
- 【C++】类构造函数 & 析构函数
- [c++]派生类的构造函数和析构函数
- C++:类的构造函数和析构函数
- c++---派生类的构造函数和析构函数
- 【C/C++】实现一个string类的构造函数、析构函数和赋值函数
- 关于c++默认的构造函数、析构函数、拷贝构造函数、move函数
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- c++/string的构造析构函数
- [c++]类的构造函数
- C++-类的构造函数
- srting的类构造函数、析构函数、拷贝构造函数与赋值构造函数
- string类的构造函数,析构函数,拷贝构造函数和赋值构造函数
- C++——类的构造函数、析构函数与赋值函数用法浅谈
- C/C++学习笔记:String类的构造函数、析构函数和赋值函数
- C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
- c/c++整理--类String的构造函数、析构函数和赋值函数
- c/c++整理--类String的构造函数、析构函数和赋值函数
- C语言的构造函数与析构函数
- 23设计模式之建造者模式(Builder)
- Android手机通用检测指令
- PHOTOSHOP 开发脚本初入 批量修改文字样式
- Nagios and NSCA installation
- 23设计模式之解释器模式(Interpreter)
- C++类的构造函数、析构函数
- LRUCache原理及HashMap LinkedHashMap内部实现原理
- HashMap Hashtable区别
- 23设计模式之命令模式(Command)
- ScrollView嵌套ListView只显示一行解决方案
- 关于Java多线程Thread的join用法
- 搭建ionic环境创建新的工程
- 23设计模式之模板方法(TemplateMethod)
- 将博客搬至CSDN