История изменений
Исправление asaw, (текущая версия) :
Смешивать множественное наследование и виртуальные функции в с++ - это ад. В большинстве случаев оно вообще не соберётся, а если и соберётся, то могут возникнуть забавные казусы.
Интересно, что это за «большинство случаев» такое? Вот этот вот код не соберется? Или тут должны возникнуть какие-то забавные казусы, может быть?
#include <iostream>
int main()
{
struct B1 {
virtual void foo() { std::cout << "B1::foo" << std::endl; }
};
struct B2 {
virtual void foo() { std::cout << "B2::foo" << std::endl; }
};
struct C1 : B1, B2 {
void foo() override { std::cout << "C1::foo" << std::endl; }
};
C1 c1;
B1& rb1{c1};
B2& rb2{c1};
c1.foo();
rb1.foo();
rb2.foo();
}
Исходная версия asaw, :
Смешивать множественное наследование и виртуальные функции в с++ - это ад. В большинстве случаев оно вообще не соберётся, а если и соберётся, то могут возникнуть забавные казусы.
Интересно, что это за «большинство случаев» такое? Вот этот вот код не соберется? Или тут должны возникнуть какие-то забавные казусы, может быть?
#include <iostream>
int main()
{
struct B1 {
virtual void foo() { std::cout << "B1::foo" << std::endl; }
};
struct B2 {
virtual void foo() { std::cout << "B2::foo" << std::endl; }
};
struct C1 : B1, B2 {
void foo() { std::cout << "C1::foo" << std::endl; }
};
C1 c1;
B1& rb1{c1};
B2& rb2{c1};
c1.foo();
rb1.foo();
rb2.foo();
}