Если бы у меня было больше времени, я бы написал тебе более короткое письмо — Уинстон Черчилль
«Если бы у меня было больше времени, я бы написал более короткий код» — «Ленивый программист» :)
Так почему бы не использовать компилятор для проверки собственного алгоритма.
Помните ключевое слово «виртуальный» в 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», то есть корневой узел.
Проверьте вывод.
Поэтому, если вы сомневаетесь, обратитесь за помощью к компилятору.
Подождите, пока в следующей статье будет рассмотрено больше методов компилятора.