Каждое из следующих утверждений включает в себя ограждения вокруг них для соответствующих файлов заголовков.Зависимость циклического наследования C++
C расширяет B, вещи подкласс B, так что они могут получить указатель на А- но А имеют несколько полей, которые являются подклассами B.
Моего текущим решения для хранения Bs в массиве пустот, а также использовать шаблон методы возвращают правильный объект, основанный на информации типа времени выполнения. Но я хочу знать, есть ли способ для A иметь поля C, даже если C нужно связать обратно с A, Вперед времени (время компиляции).
Я провел несколько курсов по объектно-ориентированному программированию (они были в основном в java), но ни один из них специально не ориентировался на C++.
Это, вероятно, распространенная проблема, и этот вопрос, вероятно, уже был задан и дан здесь, но я не знаю, какие ключевые слова использовать для поиска такого решения.
Ах
//#include "C.h" //would cause cyclical include
class A {
public:
A();
virtual ~A();
/**Type must be checked at runtime, because otherwise cyclical includes occur*/
template <class T> T* getComponent();
private:
//C* aComponent; //desired implementation
//Current implementation
void* components;
unsigned char componentCount;
};
Bh
#include "A.h"
class B {
public:
B();
virtual ~B();
A* getRoot();
private:
A* aRoot;
};
Ch
#include "B.h"
class C : B {
public:
B();
virtual ~B();
};
Другие языки ООП я использовал только решить такие проблемы за кулисами, где, как C++ требует, чтобы строить порядок будет правильным. Я видел несколько ответов на другие вопросы, которые выглядели смутно подобными этому, но они были неясными, пожалуйста, кратко о вашем ответе.
Итак, это похоже на использование extern, но для занятий. – awiebe
Да, точно верно. –