Важно ли, в каком порядке вы наследовали классы abstact, который имеет те же функции?C++ множественный порядок наследования и виртуальные функции
class A {
public:
virtual void f1() = 0;
virtual void f2() = 0;
};
class B : public A {
public:
virtual void f1() { globalF1_B(); }
virtual void f2() { globalF2_B(); }
};
class C : public A {
public:
virtual void f1() { globalF1_C(); }
};
class D : public A, public B, public C { };
class E : public A, public C, public B { };
ли D
и E
классов бы то же самое, если бы я написать его, как показано ниже:
class D{
public:
virtual void f1() { globalF1_C(); }
virtual void f2() { globalF2_B(); }
};
class E {
public:
virtual void f1() { globalF1_B(); }
virtual void f2() { globalF2_B(); }
};
PS. Я Наследование классA
в классD
и классаE
только в случае, если я могу забыть сделать некоторую реализацию класса функций в.
Но если все функции виртуальны, не загружали ли последние реализации функций? И каков результат, если я вызываю D.f1(); D.f2(); E.f1(); или E.f2(); (затем написано, как в первом фрагменте кода)? Последний вопрос: Важен ли порядок наследования? – Vinigas
Кажется, что вы ошибаетесь с наследованием ... Если у вас есть класс A с методом f, и вы выводите его в класс B с перегрузкой f, это означает, что в классе B вы должны использовать методы f, а не один. . В вашем классе B у вас есть f1, в C у вас есть f1, а в D у вас есть оба. Я могу предложить вам прочитать хорошую книгу о наследовании на C++. –
Но все эти функции являются ** виртуальными **, а _class_ 'A' даже не имеют реализации' f'. Вы уверены, что правы? – Vinigas