Mam klasę podstawową o nazwie zwierzę, oraz psa i kota, który dziedziczy po Zwierzęciu. I klasa wielorakościowa o nazwie dogcat, która dziedziczy od psa i kota, w grze Animal i mam metodę zwaną snem. Kiedy chcę użyć tej metody z dogcat, pojawia się błąd "DogCat :: sleep" jest niejednoznaczny, rozumiem problem, ale czytam w książce, że powinno być możliwe, kiedy deklarujesz sen jako wirtualny - ale to nie działa.Niejednoznaczne obejście dla wielowątkowości?
Czy to nie jest możliwe, czy książka jest błędna, czy istnieje jakieś obejście tego problemu?
class Animal
{
public:
Animal(){}
virtual void sleep()
{
cout << "zzzzzzzzz" << endl;
}
virtual void eat() = 0;
};
class Dog: public Animal
{
protected:
Dog(){}
virtual void eat() override
{
cout << "eats dogfood" << endl;
}
};
class Cat :public Animal
{
public:
Cat(){}
virtual void eat() override
{
cout << "eats catfood" << endl;
}
};
class DogCat : public Dog, public Cat
{
public:
DogCat(){}
using Dog::eat;
};
int main(int argc, char** argv) {
DogCat *DC = new DogCat();
DC->sleep();//Error
}
Ile zwierząt znasz, to zarówno kot jak i pies? – Peter
imho większość przypadków problemu z diamentem wskazuje na słabą klasę. A twoja sprawa zdecydowanie mieści się w tej kategorii. – user463035818