class ClassB
{
int option;
public:
ClassB(void){} //without the default constructor, the example does not compile.
ClassB(int option)
{
this->option = option;
}
};
class ClassA
{
ClassB objB; //initialize objB using default constructor. When does this actually occur?
public:
ClassA(int option)
{
objB = ClassB(option); //initialize objB again using another constructor.
}
};
int main(void)
{
ClassA objA (2);
return 0;
}
我是新來C++(來自c#),我對如何初始化類變量有點困惑。在上面的例子中,ClassA聲明一個類型爲ClassB的類對象,按值存儲。爲了做到這一點,ClassB必須有一個默認構造函數,這意味着ClassA首先使用默認構造函數創建一個ClassB。但是ClassA從不使用這個默認的objB,因爲它在ClassA的構造函數中被立即覆蓋。C++類變量和默認構造
所以我的問題:是否objB實際初始化了兩次?
如果是這樣,是不是一個不必要的步驟?將objB聲明爲指針會更快嗎?
如果不是,爲什麼ClassB需要一個默認構造函數?
如果你從來沒有成員初始化之前看到很明顯你沒看過任何像樣的C++的書。這是你要做的一個巨大的錯誤......通過實驗來接觸C++是一種自殺(因爲有時它只是不合邏輯的,而且是因爲UB)。幫你自己一個忙,並從封面讀一本好書,首先介紹(http://stackoverflow.com/q/388242/320726)。其中一些是免費的PDF下載。 – 6502
我會看看那些,謝謝。 –