C++分析构造函数与析造函数的特点梳理

 更新时间:2022年05月09日 11:38:17   作者:Gy648  
本文对类的构造函数和析构函数进行总结,主要包括了构造函数的初始化、重载、使用参数和默认参数,拷贝构造函数和析构函数,希望能帮助读者在程序开发中更好的理解类,属于C/C++基础

构造函数的调用

默认情况下编译器至少给一个类添加3个函数

1.默认构造函数(无参,函数体实现)--完成对象的初始化

2.默认析构函数(无参,函数体为空)--完成对象的清理

3.默认拷贝构造函数,属性进行值拷贝

规则:

如果用户定义了有参构造,c++不会提供无参构造,但是提供默认拷贝构造

如果用户定义了拷贝构造函数,c++不会在提供其他函数

类名(){}

构造函数的语法

1,没有返回值,也不写void;

2,函数名称与类名相同;

3,构造函数可以有参数,因此可以发生重载;

4,程序在调用对象时会自动调用构造函数,无需手动调用且只调用一次

析造函数~类名()

1.析造函数,没有返回值也不写void

2.函数名称与类名相同在前面加上~

3.构造函数不可以有参数,因此不可以发生重载

4.程序在对象销毁会自动调用析构,与构造函数的调用规则相同

构造函数的分类及调用

1.按照参数分类为 无参构造和 有参构造

class person
{
public:
    person()
    {
    cout<<"无参构造的调用"<<endl;
    }
    person(int a)
    {
    cout<<"有参构造的调用"<<endl;
    }
};

2.按照类型分为 普通构造和 拷贝构造

person(const person& p)
{
}

拷贝构造的语法

调用构造函数的方法

void test()
{
    //1.括号法
    person p1;//默认无参构造调用
    person p2(10);//默认有参构造的调用
     preson p3(p2);//拷贝构造的调用;
    //若是这样写 下面这行代码会被认为是编译器的声明
     person p1();  // void func();
   // 无法完成函数的调用
    2.显示法
    person p1;
    person p2=person(10);
    person p3=person(p2);
    // 匿名对象
   person(10);//特点:当前行执行结束后,系统会立即回收匿名对象
    // 3.隐式转换法
    person p4=10;// 相当于 写了 person p4 =person(10);
    person p5=p4;
}

拷贝构造的调用时机

1.使用一个已经创建完毕的对象来初始化一个新对象

2.值传递的形式给函数参数传值

class p
{
};
void dowork(person p )//形参p
{
}
void test02()
{
    person p;
    dowork(p);// 相当于发生了隐式类型转换 传入值拷贝 person p=p;
}

3.值方式返回局部对象

深拷贝与浅拷贝

如果利用编译器提供的拷贝构造函数

会做浅(值)拷贝的操作(会使得new的对象指针指向同一个地址),会带来对堆区内存持续释放的问题

如果堆区开辟了内存,可以在析构函数中释放;

对于拷贝构造函数,可以自己实现一个拷贝构造函数(深拷贝)(new一个新的对象实现拷贝构造)

总结: 如果属性有在堆区开辟,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题

初始化列表

c++提供了初始化列表语法用来初始化属性

class person
{
    person(int a,int b,int c):m_a(a),m_b(b),m_c(c);
    {
    }
    int m_a;
    int m_b;
    int m_c;
};

到此这篇关于C++分析构造函数与析造函数的特点梳理的文章就介绍到这了,更多相关C++构造函数与析造函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言函数的基本使用和递归详解

    C语言函数的基本使用和递归详解

    一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层
    2021-09-09
  • 浅谈VC中预编译的头文件放那里的问题分析

    浅谈VC中预编译的头文件放那里的问题分析

    本篇文章是对VC中预编译的头文件放那里的问题进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • vscode配置C++环境的图文教程

    vscode配置C++环境的图文教程

    这篇文章主要介绍了vscode配置C++环境的教程图文详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • MFC中Radio Button的用法详解

    MFC中Radio Button的用法详解

    这篇文章主要介绍了MFC中Radio Button的用法,需要的朋友可以参考下
    2014-07-07
  • C语言形参与实参使用的差别讲解

    C语言形参与实参使用的差别讲解

    形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用,形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送
    2023-02-02
  • Qt QMessageBox类使用教程

    Qt QMessageBox类使用教程

    QMessageBox类提供一个模态对话框,用于通知用户或询问用户一个问题并接收答案。这篇文章主要介绍了QMessageBox的一些常用用法,需要的小伙伴快来学习一下
    2021-12-12
  • VS2019如何添加头文件路径的方法步骤

    VS2019如何添加头文件路径的方法步骤

    这篇文章主要介绍了VS2019如何添加头文件路径的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 解析C++中的字符串处理函数和指针

    解析C++中的字符串处理函数和指针

    这篇文章主要介绍了解析C++中的字符串处理函数和指针,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C++实现LeetCode(179.最大组合数)

    C++实现LeetCode(179.最大组合数)

    这篇文章主要介绍了C++实现LeetCode(179.最大组合数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C语言使用四种方法初始化结构体

    C语言使用四种方法初始化结构体

    这篇文章说明了什么是结构体,介绍了结构体的概念和使用优点,在C语言中如何使用和初始化结构体方法,通过详细的代码展开进行说明,希望该篇文章对你有所帮助
    2021-06-06

最新评论