C++学习笔记:构造函数和析构函数(重要)
2022/1/2 17:07:24
本文主要是介绍C++学习笔记:构造函数和析构函数(重要),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 一、构造函数
- 二、复制构造函数
- 三、析构函数
一、构造函数
- 什么是构造函数: 是指在 对象 被创建的时侯,利用特定的值去构造对象,将对象初始化为一个特 定的状态。
- 构造函数的性质:
(1) 构造函数的函数名和类的名字保持一致,并且没有返回值。
(2) 构造函数通常被声明为公有函数。
(3) 如果自己不显示的写出构造函数,系统会默认生成一个无参的构造函数,在对象被创建的时候自动调用,这个构造函数不会去做任何事情,只是C++的规定对象被创建的时候一定会有构造函数的调用。
(4) 构造函数可以重载。
注意:构造函数是在对象被创建的时候自动调用。
二、复制构造函数
- 什么是复制构造函数: 用于已有对象的数据成员的数值复制。
- 特点:
(1) 形参是本类的对象的引用
(2) 作用在于使得一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。 - 复制构造函数被调用的三种情况:
(1)当用一个类的对象,去初始化另外一个对象。
代码示例:
class Point { public: Point(int xx,int yy); //构造函数 Point(Point &p); //赋值构造函数,注意形参是本类对象的引用。 int getX() { return x; } int getY() { return y; } //写成了内联函数的形式 private: int x,y; }; Point::Point(int xx,int yy) { x = xx; y = yy; } Point::Point(Point &p) { x = p.x; y = p.y; cout << "调用了复制构造函数" << endl; } int main() { Point a(3, 4); Point b(a); //传递a的引用,调用一次复制构造函数 Point c = a; //再次调用,和b(a)方式一样; //测试: cout << "b的x: "<<b.getX() << endl; cout << "c的x: "<<c.getX() << endl; }
结果:
调用了复制构造函数 调用了复制构造函数 b的x: 3 c的x: 3
(2)函数的形参是类的对象的时候,调用函数进行形实结合的时候
void f(Point p) { cout << p.getX() << endl; }
f(a); //调用一次复制构造函数
结果:
调用了复制构造函数 3
注意这种情况: 只有在对象进行值传递的时候会进行调用复制构造函数,引用传递不会调用。
(3) 函数的返回值为类的对象的时候,函数执行结束返回调用者时
代码:
//函数的返回值是类的对象 Point g() { Point a(50, 100); return a; }
注意:
- 不是所有编译器都会针对这三种情况调用,根据编译器的差异,结果会有不同,第三种情况,我实验了一下,就没有调用。
- 默认的复制构造函数(系统自动生成的),实现的只是浅复制,要实现真正的深复制,必须要自己编写复制构造函数
三、析构函数
- 什么是析构函数: 和构造函数作用几乎正好相反,用来完成一些程序即将结束的清除性的工作。
- 特点:
(1)析构函数是在对象的生存期即将结束的时刻被系统自动调用的。
(2)无返回值,不接受任何参数,但可以是虚函数。
参考书籍:C++语言程序设计第四版(郑莉,董渊,何江舟)
这篇关于C++学习笔记:构造函数和析构函数(重要)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01巧用 TiCDC Syncpoint 构建银行实时交易和准实时计算一体化架构
- 2024-05-01银行核心背后的落地工程体系丨Oracle - TiDB 数据迁移详解
- 2024-04-26高性能表格工具VTable总体构成-icode9专业技术文章分享
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享