5
私はいくつかの継承された派生クラスを持つ基本クラスを持っています。このような何か:
多型とデフォルト値は共存できますか?
class A {
public:
virtual void f(string foo = "bar") {
cout << foo << endl;
}
};
class B: public A {
public:
void f(string foo = "howdy") {
cout << foo << endl;
}
};
class C: public A {
public:
void f(string foo = "something") {
cout << foo << endl;
}
};
私は簡潔にするためだけの2つのクラスを継承しました。
これがメインです:
A* aArray[] = {
new B,
new C,
};
int main() {
aArray[0]->f();
aArray[0]->f();
return 0;
}
私はプログラムを実行すると、私は戻って取得出力は次のようになります。
bar
bar
ただ、コンパイラは、オーバーライド機能のデフォルト引数を無視する方法があればのように。
これは正常なのでしょうか、間違っていることや欠けていることがありますか?
デフォルトの引数は、関数シグネチャを異なるものにする場合があります。警告を最大にして再コンパイルしてください。 –
@ThomasMatthews:解決方法は?基本クラスの仮想関数のデフォルト引数を削除し、継承されたオーバーライドされた関数のままにしておけばよいですか? – Overflowh
@Overflowh:実験を試してください:関数シグネチャのデフォルトの割り当てを削除し、再テストしてください。 –