C++构造函数和析构函数


前言

在定义对象的时候进行的数据成员设置,成为对象的初始化。在特定对象使用结束时,还经常需要进行一些清理工作。C++ 程序中的初始化和清理工作,分别由两个特殊的成员函数来完成,它们就是构造函数和析构函数


一、构造函数

1.基本定义

C++编译系统在对象初始化的问题上,严格规定了初始化程序的接口形式,并由一套自动的调用机制,这里所说的初始化程序就是构造函数。
构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态。 构造函数也是类的一个成员函数,除了具有一般成员函数的特征之外,还有一些特殊的性质:构造函数的函数名与类名相同,而且没有返回值;构造函数通常被声明为公有函数。构造函数在对象被创建的时候将被自动调用。
调用时无须提供参数的构造函数称为默认构造函数,如下所示:

class circle {
public:
    circle() {}//编译系统生成的隐含的默认构造函数
};

也可以定义恰当的构造函数,circle类的对象在建立时就能获得一个初始的值,如下所示:

public:
    circle(double r) {
        this->r = r;
    }
    double getRadir() {
        return this->r;
    }
private:
    double r;
};

完整代码如下:


#include <iostream>
using namespace std;

class circle {
public:
    circle(double r) {
        this->r = r;
    }
    double getRadir() {
        return this->r;
    }
private:
    double r;
};

int main()
{
    circle cir(3);
    cout << cir.getRadir() << endl;
    return 0;
}

2.复制构造函数

复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用。其作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。
程序员可以根据实际问题的需要定义特定的复制构造函数,以实现同类对象之间数据成员的传递。如果程序员没有定义类的复制构造函数,系统就会在必要时自动生成一个隐含的复制构造函数。**这个隐含的复制构造函数的功能是,把初始化对象的每个数据成员的值都复制到新建立的对象中。**如下所示:

#include <iostream>
using namespace std;

class circle {
public:
    circle(double r) {
        this->r = r;
    }
    circle(circle &cir);
    double getRadir() {
        return this->r;
    }
private:
    double r;
};

int main()
{
    circle cir(3);
    circle c(cir);
    cout << cir.getRadir() << endl;
    cout << c.getRadir() << endl;
    return 0;
}

circle::circle(circle& cir){
    r = cir.r;
}

普通构造函数是在对象被创建时调用,而复制构造函数在以下三种情况下会被调用:
1)当用一个类去初始化该类的另一个对象时;
2)如果函数的形参时类的对象,调用函数时,进行形参和实参结合时;
3)如果函数的返回值是类的对象,函数执行完成返回调用值时。

二、析构函数

析构函数与构造函数的作用几乎正好相反,它用来完成对象被删除前的一些清理工作,也就是专门做扫尾工作的。析构函数实在对象的生存期即将结束的时刻被自动调用的。
与析构函数一样,析构函数通常也是类的一个公有函数成员,它的名称是由类名前面加“~”构成,没有返回值。和析构函数不同的是析构函数不接收任何参数,但可以是虚函数。

class circle {
public:
    circle(double r) {
        this->r = r;
    }
    circle(circle &cir);
    double getRadir() {
        return this->r;
    }
    ~circle(){}//析构函数
private:
    double r;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值