我有類Foo有一個構造函數給出:構造被稱爲在C少論據++
class Foo {
public:
Foo(int w, char x, int y, int z);
...
};
int main()
{
Foo abc (10, 'a');
}
我可以使用該構造這樣嗎?當構造函數簽名不匹配時?
那麼我該如何給出默認值?
我有類Foo有一個構造函數給出:構造被稱爲在C少論據++
class Foo {
public:
Foo(int w, char x, int y, int z);
...
};
int main()
{
Foo abc (10, 'a');
}
我可以使用該構造這樣嗎?當構造函數簽名不匹配時?
那麼我該如何給出默認值?
不,除非在簽名尾部的參數有默認值,例如:
class Foo {
public:
Foo(int w, char x, int y=5, int z=0);
...
};
如果有違約,那麼你可以只提供非默認的參數,以及任選的一些違約的,即以下任何調用都是有效的:
Foo abc (10, 'a');
Foo abc (10, 'a', 3);
Foo abc (10, 'a', 42, 11);
你不能,除非缺少構造函數參數具有默認值。
例如,您可以做此:
class Foo {
public:
Foo(int w, char x, int y = 0, int z = 1);
...
};
int main()
{
Foo abc (10, 'a'); /* y is implicitly 0 and z is 1 */
}
或除非構造函數重載。 – DonCallisto 2011-12-20 13:54:22
否 - 如果沒有構造函數接受兩個參數相匹配的類型,你不能。
那麼我如何給予默認值? – 2011-12-20 13:54:37
將ctor的_declaration_改爲'Foo(int w,char x,int y = 10,int z = 10);'。不要更改_definition_(您自己編寫代碼的地方)。 – user1071136 2011-12-20 14:03:06
要提供默認參數,請將它們等於零或者使用某個默認值。
class Foo {
public:
Foo(int w, char x, int y = 0, int z = 0) { }
// ...
};
或者,
class Foo {
public:
Foo(int w, char x, int = 0, int = 0);
// ...
};
// Define your constructor here, note 'no default parameters'
Foo::Foo(int w, char x, int y, int z) { }
我建議重載構造函數,而不是提供默認值。
class Foo {
public:
Foo(int w, char x); // y = 0, z = 1
Foo(int w, char x, int y); // z = 1
Foo(int w, char x, int y, int z);
};
這到底風格問題:你需要複製的初始化列表利弊,因爲構造函數不能被鏈接,利弊可讀性恕我直言。請務必閱讀此thread。
你有什麼嘗試?你的絆腳石是什麼?你發現哪種診斷很難理解? – 2011-12-20 13:54:11