面向对象之构造析构
程序员文章站
2022-04-06 20:55:12
...
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修饰的数据只能通过初始化列表的方法初始化哦。
析构函数声明方法与构造函数类似,前面只需要加~即可
~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; //挥一挥衣袖不带走一片云彩
}