【零基础学习C++】构造函数与析构函数

这篇具有很好参考价值的文章主要介绍了【零基础学习C++】构造函数与析构函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:【😊个人主页】
系列专栏:【❤️系列专栏】

【零基础学习C++】构造函数与析构函数



前言

期末复习笔记,感兴趣的可以收藏


构造函数与析构函数

构造函数

C++用以初始化对象的数据成员的函数

构造函数要注意的知识点:

  1. 构造函数是没有返回值类型的。
  2. 构造函数的函数名必须 与类名一致。
  3. 构造函数并不是由我们手动调用的, 构造函数是在创建对应对象的时候由jvm主动调用的(每创建一个对象就会调用一次构造函数)。
  4. 如果一个类没有显式的添加一个构造函数,那么java编译器会为该类添加一个无参的构造函数。
  5. 如果一个类已经显式的添加一个构造函数,那么java编译器则不会再为该类添加一个无参的构造函数。
  6. 构造函数是可以以函数重载的形式存在多个的。
  7. 构造类型可以设置缺省参数。
  8. 构造函数不可以对静态数据成员进行初始化
  9. 编译器总是自动创建一个不带参数的构造函数
构造函数的格式:

修饰符  函数名(形式参数列表){
    初始化的语句;
}

析构函数

析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)。

构造函数要注意的知识点:

  1. 构造函数可以有多个来构成重载,但析构函数只能有一个,不能构成重载
  2. 构造函数可以有参数,但析构函数不能有参数
  3. 与构造函数相同的是,如果没有显式的写出析构函数,那么编译器也会自动加上一个析构函数,什么都不做;如果我们显式的写了析构函数,那么将会覆盖默认的析构函数
  4. 在主函数中,析构函数的执行在return语句之前,这也说明主函数结束的标志是return,return执行完后主函数也就执行完了,就算return后面还有其他的语句,也不会执行
  5. 一个类中只能定义一个析构函数
 class <类名>
{
 public:
 ~<类名>();
 };
 <类名>::~<类名>()
 {
//函数体
}

拷贝构造函数

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。
拷贝构造函数通常用于:

  • 通过使用另一个同类型的对象来初始化新创建的对象。
  • 复制对象把它作为参数传递给函数。
  • 复制对象,并从函数返回这个对象

拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。
使用场景:

  • 对象以值传递的方式传入函数参数
  • 对象以值传递的方式从函数返回
  • 对象需要通过另外一个对象进行初始
常见形式:
classname (const classname &obj) {
// 构造函数的主体
}

深拷贝

只要发现对象有可变类型,就会对该对象到最后一个可变类型的每一层对象进行拷贝,对每一层拷贝的对象都会开辟新的内存空间进行存储
通常包括:
不可变类型: 数字、字符串、元组
对于数字和字符串,都是不可变类型,所以使用深拷贝的时候,不会开辟新的内存空间。
元组中如果有可变类型对象,进行深拷贝后,会开辟新的内存地址。元组中如果没有可变类型对象,进行深拷贝后,不会开辟新的内存地址。
如果发现元组里面有可变类型那么,会对元组进行拷贝和子元素列表进行拷贝,拷贝后都会产生一个新的内存空间。但是不可变类型不会进行拷贝,因为不可变类型不允许在原有内存空间的基础修改数据。所以拷贝没有意义。因为每次拷贝,内存地址都会发生变化。
可变类型: 列表 、 字典、 集合
对应深拷贝来说也会进行拷贝,如果发现子对象也是可变类型也会进行拷贝,拷贝后会开辟新的内存空间存储拷贝后的对象。

浅拷贝

对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。
只会对可变类型的第一层对象进行拷贝,不会对子对象进行拷贝,拷贝成功后会开辟一个新的内存空间存储拷贝这个对象
通常包括:
1.不可变类型:数字、字符串、元组
浅拷贝不会对不可变类型进行拷贝,也就是说不会开辟内存空间
2.可变类型: 列表 、字典、 集合
对于可变类型来说,浅拷贝只拷贝第一次层,不会对子对象进行拷贝,所以第一层内存地址发生了变化,但是子对象内存地址没有变化

浅拷贝和深拷贝的区别

浅拷贝最多拷贝对象的一层,深拷贝可能是拷贝对象的多层
【零基础学习C++】构造函数与析构函数文章来源地址https://www.toymoban.com/news/detail-501607.html

到了这里,关于【零基础学习C++】构造函数与析构函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • string类构造函数与析构函数

    构造函数 作用 string s 构造一个空字符串 string s(s1) 生成一个和s1相同的空字符串s string s(s1,5) 将s1[5]以后的部分作为s的初始部分 string s(s1,5,5) 将始于s1[5],长度为5的部分作为s的初始值 string s(cstr) 以C_string类型的cstr作为字符串s的初始值 string s(sctr,char_len) 以C_string类型的cstr的前

    2024年02月08日
    浏览(45)
  • Roscpp中构造函数与析构函数及在无人机串口通信应用

    构造函数 作用:初始化,在创建对象时会自动调用,有点像Python中的 __init__ 方法 特点:命名为 class命名 ,在public中声明。 析构函数 作用:完成释放前的一些清理工作。 特点:命名为 ~+class命名 ,在public中声明。 调用顺序 栈的顺序,先构造的后析构。 ROScpp中在include文件

    2024年01月21日
    浏览(44)
  • C++ 类构造函数 & 析构函数

    类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。 下面的实例有助于更好地理解构造函数的概念: 当上面的代码

    2024年01月17日
    浏览(52)
  • C++ 类和对象(二)构造函数、析构函数、拷贝构造函数

            本文将介绍类的6个默认成员函数中的构造函数、析构函数和拷贝构造函数,赋值重载和取地址重载涉及运算符重载的知识,将在下篇讲解。所谓默认成员函数,也就是每个类都有的成员函数,我们可以显式定义这些函数,否则,编译器会自动生成它们。 目录 前言

    2024年02月09日
    浏览(44)
  • 【C++初阶】类和对象——构造函数&&析构函数&&拷贝构造函数

    ========================================================================= 个人主页点击直达: 小白不是程序媛 C++系列专栏: C++头疼记 ========================================================================= 目录 前言 类的6个默认成员函数 构造函数 概念 构造函数的特性 析构函数 概念 析构函数特性 拷贝构

    2024年02月06日
    浏览(56)
  • 【C++】:构造函数和析构函数

    如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数 : 用户没有显式实现,编译器会生成的成员函数称为默认成员函数 。 这篇文章介绍的是 构造函数 和 析构函数

    2024年04月27日
    浏览(40)
  • 【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)

       🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏:   目录 类的6个默认成员函数 构造函数 特性  析构函数 特性  析构的顺序 拷贝构造函数 特性 常引用      💬 hello! 各位铁子们大家好哇。              今日更新了类与对象的构造函数、

    2024年02月21日
    浏览(42)
  • 【C++】C++入门—初识构造函数 , 析构函数,拷贝构造函数,赋值运算符重载

    如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗? 并不是 任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数 我们实现了,编译器就不会生成了 构造函数是

    2024年02月21日
    浏览(48)
  • C++篇----构造函数和析构函数

    在很多时候,当写了初始化,动态开辟的,需要写销毁函数,写了销毁函数之后,但是却忘记了调用这些函数,忘记调用初始化函数还好,编译器会报错,但是如果是忘记调用销毁函数,那么编译器是不会报错,但是不能说这个程序就没错哦了,反而有很大的问题,存在内存

    2024年02月01日
    浏览(41)
  • 【C++初阶】构造函数和析构函数

    📖 默认成员函数 用户没有显式实现,编译器会自动生成的成员函数,称为默认成员函数。 构造函数 :完成对象的初始化工作。 析构函数 :完成对象空间的清理工作。 拷贝构造 :使用同类对象初始化创建对象。 赋值重载 :把一个对象赋值给另外一个对象(该对象已存在

    2024年02月17日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包