Виртуальное наследование

315
13 октября 2017, 16:05

Почему данный код не работает?

class A {
public:
virtual void print()const { std::cout << "class A" << std::endl; }
};
class B : public virtual  A {
public:
void print()const { std::cout << "class B" << std::endl; }
};
class C : public virtual A {
public:
void print()const { std::cout << "class C" << std::endl; }
};
class D : public B, public C {
public:
using C::print;
};
Answer 1

Виртуальное наследование введено, чтобы функция, которая наследуется через B и через C, определялась однозначно. Но при этом метод нельзя определить виртуальным. Ведь тогда в классах B и С он определен по-разному, как компилятору определять, какой вариант брать? Страуструп об этом пишет очень подробно. На практике редко используют виртуальное наследование из-за таких проблем.

READ ALSO
Передача файла в параметр функции,с++

Передача файла в параметр функции,с++

Как передать файл в функцию вроде разобралсяНо есть непонятные моменты

228
базовый адрес потока

базовый адрес потока

Добрый день! Подскажите есть ли возможность получить базовый адрес потока по thread IDНеобходимо для определения из какого модуля процесса запущен...

190
Opencv 3 C++, cоздать ROI в виде трапеции

Opencv 3 C++, cоздать ROI в виде трапеции

Добрый день, подcкажите как cоздать облаcть интереcов в виде трапеции c помощью и cvSetImageROI или без помощи нееCпаcибо

228
Постоянное обновление label в Glade

Постоянное обновление label в Glade

Как постоянно обновлять label? В интернете куча статей о изменение label с помощью кнопки, но мне нужно в цикле выводить информациюПосле gtk_main()...

201