
目录前言:
💂作者简介:大家好,我是翼同学!
📃个人主页:翼同学的CSDN博客
🔥系列专栏:【C++学习笔记】更新中…
👏备注:如果文章有误,请指正,万分感谢!让我们一起学习,一起进步。
✅最后:如果文章对您有帮助,请👍三连支持一下博主哦。
🤞
- 1️⃣前言
- 2️⃣构造函数
- 🟥认识
- 🟩实例
- 3️⃣析构函数
- 🟥认识
- 🟩实例
- 4️⃣说明
1️⃣前言
🔋什么是构造函数?
- 构造函数是一种特殊的方法
- 用于创建对象时初始化对象成员
🔋什么是析构函数?
- 析构函数与构造函数相反
- 当对象结束其生命周期,系统自动执行析构函数
- 即释放内存,撤销类对象
2️⃣构造函数 🟥认识
💡为什么要有构造函数?
当我们的类有了构造函数后,一旦创建类的对象,构造函数就马上被调用,给类的对象分配内存,并赋予初始值。
反之,如果一个类没有构造函数,那么创建对象时就仅仅是创建,并没有初始化,此时就需要人为初始化。
但是,当类的数据成员属于私有成员或保护成员时,我们就无法访问,更无法进行初始化,所以,类的初始化工作就落到了构造函数上。
✨C++规定:
- 与类同名的成员函数就是构造函数
✨构造函数的特点:
- 没有返回类型
- 当创建类对象时会被自动调用
🟩实例
🌱例子1
- 当我们在主函数里创建一个圆
Cir的对象c时,系统会自动调用构造函数,初始化对象
🌱例子2
- 我们可以在类的外部定义构造函数
- 在类外部定义构造函数时,函数名前必须加上
类名::- 这与其他成员函数一样
- 还有一点就是,构造函数没有返回值,没有返回值!
🌱例子3
- 添加两个成员函数
运行结果为:
🌱例子4:
- 构造函数可以带上参数
- 默认的构造函数没有任何参数
- 当构造函数带上参数后,创建对象时就能给对象赋初始值
运行结果为:
🌱例子5:
- 可以重载构造函数
运行结果如下:
- 也就是说,C++会根据声明中的参数选择合适的构造函数
🌱例子6:
- 当我们声明一个带有参数的构造函数时,一旦创建无参对象,就不能正确的编译。
比如这个有参构造函数:
一旦我们在主函数里创建无参对象,就会报错。
如图:
解决方法有两个:
- 增加一个无参构造函数
- 有参构造函数设置默认值
1)增加一个无参构造函数
如图:
2)有参构造函数设置默认值
3️⃣析构函数 🟥认识💡为什么要有析构函数?
- 析构函数被用于释放类的对象
- 比如构造函数从堆中分配了内存,那么当对象的生命周期结束时,这块内存就必须被释放
- 而这就是析构函数的工作
✨C++规定:
- 带有
~类名的成员函数就是析构函数
✨析构函数的特点:
- 没有返回类型
- 没有参数
- 无法重载,即每个类只有一个析构函数
🟩实例
🌱例子
- 下面例子中,
~Student就是一个析构函数
- 构造函数分配了一段堆内存给数据成员
name- 一旦创建类的对象,其就会有一段堆内存空间
- 而当对象在撤销时,释放该内存的工作就落在析构函数身上了
- 一个类可以有多个构造函数,但析构函数只能有一个
4️⃣说明
- C++规定,每个类都必须有一个构造函数,如果我们没有设置构造函数的话,C++就会提供一个默认的构造函数,该默认的构造函数就是一个无参的构造函数,它仅负责创建对象空间,而不做任何初始化工作。
- 如果类中已经定义了构造函数,那么C++就不会提供默认构造函数。
此时如果为类定义的是一个带参构造函数,那么还想要有无参构造函数的话,就必须自己定义。
好了,希望这篇文章能对你有所帮助。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)