Если бы у меня было больше времени, я бы написал тебе более короткое письмоУинстон Черчилль

«Если бы у меня было больше времени, я бы написал более короткий код» — «Ленивый программист» :)

Так почему бы не использовать компилятор для проверки собственного алгоритма.

Помните ключевое слово «виртуальный» в C++? Он имеет несколько значений.

Наиболее важным является использование «полиморфизма», когда вы используете его с функциями. Основная концепция ООП.

Ирония в том, что одно и то же ключевое слово используется для решения проблем полиморфизма, возникающих при использовании множественного наследования :)

Таким образом, если у вас есть вся иерархия виртуального наследования, компилятор использует поиск в глубину при обходе графа базовых классов слева направо, где слева направо относится к порядку появления базовых классов. названия классов.

Так почему бы не использовать и посмотреть, работает ли это…

Давайте посмотрим на диаграмму снизу вверх, она выглядит как полное бинарное дерево, где «G» — корневой узел.

DFS (обход после заказа) даст вам вывод узлов как

A — B — E — C — D — F — G

Теперь давайте напишем классы в том же порядке. Вот код.

//

// main.cpp

// DFSusingCppCompiler

//

// Создано Сиддхартхой Сингхом 18.04.17.

// Copyright © 2017 Сиддхартха Сингх. Все права защищены.

//

#include ‹iostream›

используя std::cout;

используя std::endl;

класс А {

публичный:

A() {

cout ‹‹ "A()" ‹‹ endl;

}

};

класс Б {

публичный:

B() {

cout ‹‹ "B()" ‹‹ endl;

}

};

класс С {

публичный:

C() {

cout ‹‹ "C()" ‹‹ endl;

}

};

класс D {

публичный:

D() {

cout ‹‹ "D()" ‹‹ endl;

}

};

класс E: общедоступный виртуальный A, виртуальный общедоступный B {

публичный:

E() {

cout ‹‹ "E()" ‹‹ endl;

}

};

класс F: общедоступный виртуальный C, виртуальный общедоступный D {

публичный:

F() {

cout ‹‹ "F()" ‹‹ endl;

}

};

класс G: виртуальный публичный E, виртуальный публичный F {

публичный:

G() {

cout ‹‹ "G()" ‹‹ endl;

}

};

int main(int argc, char ** argv, char * arge[]) try {

G g;

вернуть 0;

} поймать(…) {

cout ‹‹ «Неперехваченное исключение…» ‹‹ endl;

}

Скомпилируйте и запустите код.

Единственный код, который у меня есть в main, это: создал объект «G», то есть корневой узел.

Проверьте вывод.

Поэтому, если вы сомневаетесь, обратитесь за помощью к компилятору.

Подождите, пока в следующей статье будет рассмотрено больше методов компилятора.