Я пишу некоторый код, чтобы показать наследование.При этом я хочу проиллюстрировать это, имея базовый класс, который содержит вектор указателей, которые могут содержать указатели объектов производного класса.
Я получаю эту ошибку, что «дочерний класс необъявлен»в базовой функции «void addChild (string nm, string sm)» в классе Parents (базовый класс).Я понимаю, что это может выходить за рамки базового класса.Может ли кто-нибудь предоставить мне решение этой проблемы, когда я все еще смогу создать экземпляр объекта производного класса из базового класса.Я хочу, чтобы все было сделано в базовом классе.Пожалуйста, уточните, если это нормально и является хорошей практикой.Если нет, пожалуйста, предложите несколько идей.
Вот мой код:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Parents // base class
{
vector <Parents*> fam;
protected:
string firstName;
string lastName;
public:
Parents()
{
//default constructor
}
Parents(string fn, string ln)
{
firstName = fn;
lastName = ln;
}
void displayChildren()
{
if (fam.empty())
{
cout << "Vector is empty" << endl;
}
else
{
for (unsigned int i = 0; i < fam.size(); i++)
{
std::cout, fam.at(i);
}
}
}
void displayParentsInfo(Parents& const par)
{
cout << "First name : " << par.firstName << endl;
cout << "Last name : " << par.lastName << endl;
}
void addChild(string nm, string sm)
{
Child* c1 = new Child(nm, sm);
fam.push_back(c1);
}
};
class Child : public Parents //derived class
{
string firstname;
string surname;
public:
Child()
{
//default constructor
}
Child(string a, string b)
{
firstname = a;
surname = b;
}
//~Child()
//{
//destructor called
//}
void displayChildInfo(Child & const c)
{
cout << "Child's firstname : " << c.firstname;
cout << "Child's surname : " << c.surname;
}
};
Ура!