Bir dizi kalıtsal türetilmiş sınıf ile temel bir sınıfım var. Böyle bir şey:
Polimorfizm ve varsayılan değerler: birlikte olabilir mi?
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;
}
};
ben kısalık için sadece iki sınıf miras.
Bu ana geçerli:
A* aArray[] = {
new B,
new C,
};
int main() {
aArray[0]->f();
aArray[0]->f();
return 0;
}
Ben programı, geri is olsun çıkışını çalıştırdığınızda:
bar
bar
Tıpkı nasıl derleyici geçersiz kılınan fonksiyonların varsayılan argümanlar görmezden gelirse.
Bu normal midir, yoksa yanlış yaptığım veya eksik olduğum bir şey var mı?
Varsayılan argümanlar, işlev imzalarını farklı yapıyor olabilir. Uyarılarınızı maksimum değere çevirin ve yeniden derleyin. –
@ThomasMatthews: Öyleyse çözüm ne olabilir? Temel sınıf sanal işlevlerindeki varsayılan argümanı kaldırmak ve bunları devralınan geçersiz kılınmış işlevlerde bırakmak tamam mı? – Overflowh
@Overflowh: Deneme yapmayı deneyin: İşlev imzasındaki varsayılan atamaları kaldırın ve yeniden test edin. –