1. 程式人生 > >面向物件之構造析構

面向物件之構造析構

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