谈谈C++构造函数和析构函数那些事儿

本文探讨了C++中的构造函数和析构函数,包括基础概念、构造函数的重载、子类调用顺序、拷贝构造函数及其应用,以及构造函数的隐式转换。讲解了构造函数在对象创建时的调用,析构函数的销毁顺序,拷贝构造函数在对象拷贝时的作用,以及如何通过`explicit`关键字避免隐式转换带来的问题。
摘要由CSDN通过智能技术生成

1. 基础概念

构造函数:在C++对象创建的时候,自动调用,一般用于对象的初始化。没有返回类型,函数名与类名一致。

析构函数:用于在程序结束时自动销毁对象,也可显式调用销毁。没有返回类型,没有参数,函数名为 ~ + 类名

C++中,构造函数和析构函数在每一个类中都有缺省实现,所以不定义构造函数和析构函数,也是可以正常运行的。

2. 构造函数的重载:

 构造函数可以分为带参数和不带参数两种(同名不同参数,即为重载)。简单示例入以下:

#include <iostream>
using namespace std;

class base{
private:
    int a;
public:
    base(){    // 不带参数的构造函数
        a = 0;
        cout <<"call Constructor of base" <<endl;
    }
    base(int tem): a(tem) {    // 成员初始化列表进行初始化,也可将赋值写在函数里面
        cout <<"call Constructor with parameter of base" <<endl;
    }
    ~base(){    // 析构函数
        cout <<"call Destructor of base" <<endl;
    }
};

int main()
{
    base c1;
    base c2(2);
    return 0;
}

 3. 子类的构造函数和析构函数调用顺序

 我们知道类有继承,那么子类在创建以及销毁的时候调用的构造函数和析构函数的顺序是怎样的呢?为了得到结论,做了如下测试:

#include <iostream>
using namespace std;

class base{    // 基类
private:
    int a;
public:
    base(){    // 基类无参数构造函数
        cout <<"call Constructor of base" <<endl;
    }
    base(int tem): a(tem) {    // 基类带参数构造函数
        cout <<"call Constructor with parameter of base" <<endl
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值