Я работаю над проектом, который включает класс A, содержащий несколько дочерних классов (childB, childC, childD). Моя слишком упрощенная цель состояла в том, чтобы иметь что-то вроде этого
#include <string>
class A{
public:
childB cb; <<Error C4430: missing type specifier - int assumed
childC cc; <<Error C4430: " "
childD cd; <<Error C4430: " "
A(){
cc.setString("xyz"); <<Error C2039: 'cc' is not a member of A
}
};
class childB : public A{
public:
int value;
};
class childC : public A{
private:
std::string str;
public:
void setString(std::string s){
str = s;
}
std::string getString(std::string s){
return str;
}
};
class childD : public childB{
public:
double value;
};
#include "classA.h"
int main (){
A a;
a.cc.getString(); <<Error C2228: left of '.getString()' must have class/struct/union
}
С этого момента у меня было бы несколько вещей в основном, которые задавали бы значения разных дочерних классов, но при компиляции я получаю многочисленные ошибки, говорящие мне, что cb, cc, cd не являются членами A. Дополнительные ошибки также перечислены.
Есть ли причина, по которой я не смог бы добавить дочерний класс в родительский класс, как показано?
Я не думаю, что родительский класс может иметь экземпляр дочернего класса. Вы можете использовать указатели дочерних классов вместо объектов дочернего класса для вашей цели.
Определите дочерние классы в отдельных файлах заголовков.
Добавить декларации дочерних классов в заголовочный файл родительского класса.
Используйте дочерние указатели класса вместо объектов дочернего класса.
Инициализируйте дочерние классы указателей класса родительского класса с соответствующими дочерними объектами класса в родительском методе, таком как init(). Не инициализируйте их в родительском конструкторе, так как он сделает бесконечную рекурсию. Вам нужно будет перенести метод init() в файл cpp и включить в него файлы заголовков дочерних классов.
childB
является подклассомA
аA
имеет переменную-член типаchildB
,childB
также должен будет иметь переменную-член типаchildB
, которая будет иметь другую переменную-член ... Почему вы думаете, чтоA
должен содержать экземпляры своих собственных подклассов?