Załóżmy, że mam dwie klasy bazowe B1
i B2
i klasy D
który wynika zarówno z B1 i B2 w następujący sposób:Jak zastąpić funkcje wirtualne klas bazowych, które mają identyczne nazwy w dziedziczeniu wielokrotnym?
class B1 {
public:
// ...
virtual void foo() final { cout << "Hello, B1\n"; }
};
class B2 {
public:
// ...
virtual void foo() { cout << "Good riddance, B2!\n"; }
};
class D :public B1, public B2 {
// ...
};
Projektując klasę D
, chcę zastąpić funkcję składową o nazwie foo()
z B2 ; jednak foo()
w B1 jest oznaczony jako final
i uniemożliwia mi nadpisanie w B2 B2 foo()
. Jakie jest najlepsze podejście do zastąpienia foo()
z B2?
nie mówi funkcją jest wirtualny, a ostateczna zaprzeczając sobie? Po prostu ciekawy: P – Ediac
@Ediac, 'B1' może mieć klasę podstawową, która definiuje' foo' jako wirtualną. W takim przypadku '' foo' jest wirtualne, niezależnie od tego, czy jest zaznaczone w ten czy inny sposób. – chris
Aby uniknąć tego zamieszania, dziedziczenie wielokrotne jest niedozwolone w językach takich jak Java i C# – SabaRish