如果我理解正確,我們至少有兩種不同的實現構圖的方法。 (與智能指針實現的情況不爲簡單起見,我幾乎不使用STL,沒有慾望去學習它。)如何在C++中實現類組合?
讓我們來看看維基百科example:
class Car
{
private:
Carburetor* itsCarb;
public:
Car() {itsCarb=new Carburetor();}
virtual ~Car() {delete itsCarb;}
};
所以,這是一種方法 - 我們有一個作爲私人成員指向對象的指針。 我們可以把它改寫成這樣:
class Car
{
private:
Carburetor itsCarb;
};
在這種情況下,我們有一個對象本身作爲私有成員。 (順便說一下,從術語的角度來看,我是否有權將這個實體稱爲對象?)
在第二種情況下,隱式調用默認構造函數不是強制性的(如果需要調用非默認構造函數可能在初始化列表中執行它)和析構函數。但它不是一個大問題...
當然,在某些方面,這兩種情況的差異更明顯。例如,禁止在第二種情況下從Car類的常量方法中調用化油器實例的非常量方法...
是否有任何「規則」來決定使用哪一個?我錯過了什麼嗎?
我想你的意思是「這是被禁止調用由Car類的常量方法化油器實例的非const方法」。 –
@ Laurence Ooops。你當然是對的...... – Wildcat
「[我]不想學習[STL]。」什麼?通過忽略STL,你錯過了C++的一大部分。 – rlbond