在下面的例子中,如何在另一個類中創建一個類的參數化構造函數作爲數據成員?
class Car
{
private:
int sides;
public:
Car()
{
cout<<"\ndefault called constructor";
}
Car(int nsides)
{
cout<<"\ncalled constructor";
sides=nsides;
}
};
class Auto
{
private:
Car ch;
public:
Auto(int a) : Car(a)
{
//Car test(5);
}
};
int main()
{
Auto at(5);
return 0;
}
參考下面的鏈接後: -
create objects in object passing variables through constructor
http://www.cplusplus.com/forum/beginner/9746/
我試着寫相同,執行it.unfortunately我得到以下編譯器錯誤: -
check.cpp: In constructor ‘Auto::Auto(int)’:
check.cpp:44: error: type ‘Car’ is not a direct base of ‘Auto’
如果給出的鏈接中提到的解決方案是正確的,那麼我的代碼有什麼問題?我的下一個查詢是...爲什麼只有參數化構造函數()會拋出編譯器,如果嘗試初始化它而不使用初始化列表。
這將引發編譯器錯誤: -
class Auto
{
private:
Car ch(5);
public:
Auto(int a)
{
}
};
但這並不: -
class Auto
{
private:
Car ch;
public:
Auto(int a)
{
}
};
請幫助我理解這種行爲。
在此先感謝。
即使如此,你不能做'汽車ch(5);',你需要'車ch {5};'。 – chris
@chris權利,編輯我的答案。 –
但我被允許執行以下操作: - 'private:' 'Car ch;' 那麼爲什麼編譯器不會爲這種情況拋出錯誤(不使用-std = C++)? – user1057741