建構元與解構元
虛擬函數
函數
建構元與解構元
大部份的類別在設計時都會包含有一個或多個建構元(constructor), 一個解構元(destructor)以及一個複製指派元(copy assignment operator).
建構元的用處是當一個物件被 new 建置起來之後用來初始化該一物件之用. 建構元可以有數個, 同一類別之多個建構元各包含了不同數量與型別之參數. 而沒有參數或其所有參數均具有預設值之建構元則稱為預設建構元 (default constructor). 如果在設計類別時沒有在程式碼中定義任何建構元, 則編譯器會為這個類別自動產生一個隱含的預設建構元.
隱含的函數
我們先來看一下一個簡單的類別設計:
class ubClass{};
實際經過編譯之後, 以上的程式碼會變成如下:
class ubClass
{
public:
ubClass() {} //預設建構元
ubClass(const Empty&) {} //複製建構元
~ubClass() {} //解構元
ubClass& operator=(const ubClass&) {} //複製指派元
}
接下來看看這幾個函數什麼時候會被呼叫:
ubClass ubA; //預設建構元
~ubClass() //解構元
ubClass ubB(ubA); //複製建構元
ubB = ubA; //複製指派元
預設建構元
建構元的用處是當一個物件被 new 建置起來之後用來初始化該一物件之用. 建構元可以有數個, 同一類別之多個建構元各包含了不同數量與型別之參數. 預設建構元則是被定義為一個呼叫時不需傳入參數之建構元.
class ubClass
{
int n;
public:
ubClasss(); //預設建構元在此宣告
}
此一建構元可以沒有參數或其所有參數均為具有預設值之設定. 如果撰寫程式時沒有設定預設建構元則 C++ 的編譯器會自動產生一個隱含的預設建構元.
預設建構元會在以下的狀況發生時被執行:
- 當一個物件的值被宣告時沒有加上參數列, 如: ubClass X; 或動態生成時 沒有加上參數列, 如: new ubClass; 此時, 預設建構元會被用來初始化該物件.
- 當一個物件矩陣被宣告時 , 如: ubClass X[5]; 或動態生成時, 如: new ubClass[10]; 此時, 預設建構元會被用來初始化所有矩陣內之物件.
預設建構元的注意要項:
- 如果自行定義了任何建構元時,則也一定要順便定義預設建構元。
- 定義了預設建構元之後,在具現物件時如果沒有指定初始值,則會用預設建構元來初始化該物件。
解構元
解構元是由編譯程式自動呼叫,所以解構元不能有傳回值,同時也不能有參數或是被覆載。
若主程式是用像 abort() 之類的程式中斷函數結束執行的話,那所有的解構 元都不會執行,
控制權會立刻交還給系統。
C++ 解析 主目錄
建構元與解構元
虛擬函數
函數
沒有留言:
張貼留言