Не совсем понимаю, как должны прописываться классы-группы?
Не совсем понимаю, как должны прописываться классы-группы? С обычными классами понятно, но вот как сделать класс-группу(объект класса может добавлять в себя другие объекты) пока не понимаю, помогите, я новичок в с++.
вот иерархия классов: Division, first, second - "классы-группы", в объект класса-группы нужно уметь добавлять объекты класса soldier.
из классов-групп прописан только заголовочный файл Division.h
Код программы:
Object.h:
class Object
{
public:
virtual void Show()=0;
};
Person.h:
#pragma once
#include "Object.h"
#include <iostream>
#include <cstring>
using namespace std;
class Person : public Object
{
protected:
string name;
public:
Person();
Person(string name);
~Person();
virtual void show();
};
Soldier.h
#pragma once
#include "Person.h"
class Soldier : protected Person
{
public:
Soldier(string Name);
~Soldier();
void show();
};
Soldier.cpp:
#include "Soldier.h"
void Soldier::show()
{
cout << "Soldier: " << name << endl;
}
Soldier::Soldier(string Name)
{
name = Name;
}
Soldier::~Soldier()
{
}
Division.h:
#pragma once
#include "Object.h"
#include "Person.h"
struct List
{
Object* List;
List* next;
};
class Division : public Object
{
protected:
string name;
Person* head;
List* begin;
public:
Division(string, Division*);
Division(Division&);
~Division();
Person* GetHead();
void SetName(string Name);
void SetHead(Person* p);
void Insert(Object* p);
virtual void Show() = 0;
};
Ответы (1 шт):
Можно примерно так сделать:
class Division : public Object
{
protected:
string _name;
Comander* _comanser;
list<Person*> _persons;
public:
Division(string name);
Division(Division&);
~Division();
Comander* GetHead();
void SetName(string name);
void SetHead(Comander* comander)
{
_comander = comander;
}
void addPerson(Person* p)
{
_persons.push_back(p);
}
virtual void Show()
{
cout << "Division: " << name << endl;
for (auto person: _persons)
person->Show();
}
virtual build() = 0;
};
class FirsDivision : public Division
{
public:
FirsDivision (string name):Division(name){}
~FirsDivision ();
virtual build()
{
_comander = new Comander;
_person.push_back(new Soldier);
_person.push_back(new Soldier);
}
};
class SecondDivision : public Division
{
public:
FirsDivision (string name):Division(name){}
~FirsDivision ();
virtual build()
{
_comander = new Comander;
_person.push_back(new Comander);
_person.push_back(new Comander);
}
};
Метод Show определить в классе Division и в нем же добавить новый абстрактный метод build который будет заполнять Division, и определять его в производных классах, меняя логику заполнения.
