Załóżmy, że mam niektóre kodu tak:Przeciążenie metody w podklasie w C++
class Base {
public:
virtual int Foo(int) = 0;
};
class Derived : public Base {
public:
int Foo(int);
virtual double Foo(double) = 0;
};
class Concrete : public Derived {
public:
double Foo(double);
};
Jeśli mam obiekt typu betonu, dlaczego nie mogę zadzwonić foo (int)?
Jeśli zmienię nazwę Foo (podwójną), tak aby nie przeciążała Foo, wtedy wszystko jest dobrze i obie metody są dostępne, ale to nie jest to, czego chcę.
Podobnie, jeśli usuniemy klasę Concrete i zaimplementuję Foo (double) w Derived, to oba są dostępne, ale znowu nie to, czego chcę.
Nie rozumiem problemu. GCC wersje 3.3.6 i 4.2.4 zarówno kompilują ten kod bez skargi. –
Z powodu niejawnej konwersji liczb całkowitych do podwójnych - spróbuj dodać śledzenie do funkcji i wykonaj polecenie "Konkretne c; int i = 1; c.Foo (i); ' –
Czy to nie jest nadpisywanie, jeśli przedefiniujesz wirtualną metodę w podklasie? – mucaho