面向对象之构造析构

To be or not to be, that is a question.
万物生灵有诞生就有死亡,构造函数就相当于一个对象诞生的标志,析构函数就象征了这个对象离别之前的告别。接下来我们就来看看C++语言是怎样实现的吧。
以上次讲到的猪类为例,析构函数的声明方法:

Pig();

表面上看上去就像一个无参的方法,析构函数是在对象实例化时系统自动调用的,并不需要程序员手动调用。我们利用析构函数可以给相应的数据成员赋值啦、开辟内存啦等等。
接下来我们使用构造函数为参数赋值。

Pig::Pig(string name, double weight, char sex)
{
    m_strName = name;
    m_dWeight = weight;
    m_cSex = sex;
}

这样我们就可以在对象实例化的同时为数据成员赋值啦。另外还有一种初始化列表的方法也可以赋值。如下:

Pig::Pig(string name, double weight, char sex) : m_strName(name), m_cSex(sex), m_dWeight(weight)
{
    cout << "I am a happy pig!" << endl;    //证明我曾经存在过,偶就是偶,似不一样的焰火
}

对于数据成员你可以能会想,像性别这样的属性一旦初始化之后就不应该被修改了,那样的话该如何操作呢,没关系,我们只需要修饰符const就可以啦~(≧▽≦)/~

const char m_cSex;        //性别

注意被const修饰的数据只能通过初始化列表的方法初始化哦。
error

析构函数声明方法与构造函数类似,前面只需要加~即可

~Pig();

析构函数可以用来让系统回收程序员在堆上分配的内存及做一些事后工作,下面先不演示了。

程序代码:

#include <iostream>

using namespace std;

class Pig
{
public:
    Pig(){}
    Pig(string name, double weight, char sex);
    ~Pig();
    double getWeight(); //获取体重
    char getSex();      //获取性别
    void setSex(char sex);      //设定性别
private:
    string m_strName;   //名字
    char m_cSex;        //性别
    double m_dWeight;   //体重
};  //注意后面的分号不能丢

int main(void)
{
    Pig pig("zhuganglie", 250.00, 'M');     //在栈上实例化一个对象
    cout << "Weight:" << pig.getWeight() << endl;
    cout << "Sex:" << pig.getSex() << endl;

    return 0;
}

double Pig::getWeight()
{
    return m_dWeight;
}

char Pig::getSex()
{
    return m_cSex;
}

Pig::Pig(string name, double weight, char sex) : m_strName(name), m_cSex(sex), m_dWeight(weight)
{
    cout << "I am a happy pig!" << endl;    //证明我曾经存在过,偶就是偶,似不一样的焰火
}

Pig::~Pig()
{
    cout << "I am died" << endl;    //挥一挥衣袖不带走一片云彩
}

res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值