Маю код:
▼Прихований текст
#include <iostream>
#include <conio.h>
using namespace std;
class Unit
{
protected:
double health;
int damage;
public:
Unit()
{
health = 100;
damage = 30;
}
Unit(double health, int damage)
{
this->health = health;
this->damage = damage;
}
virtual void Show() = 0;
};
class Marine : public Unit
{
public:
Marine() : Unit(200, 35)
{}
virtual void Show() override
{
cout << "\nMarine: \n";
cout << "\n\thealth: " << health << "\n";
cout << "\n\tdamage: " << damage << "\n";
}
};
class MadScientist : public Unit
{
public:
MadScientist() : Unit(150, 40)
{}
virtual void Show() override
{
cout << "\nMad scientist: \n";
cout << "\n\thealth: " << health << "\n";
cout << "\n\tdamage: " << damage << "\n";
}
};
class MilitaryDoctor : public Unit
{
public:
MilitaryDoctor() : Unit()
{}
virtual void Show() override
{
cout << "\nMilitary doctor: \n";
cout << "\n\thealth: " << health << "\n";
cout << "\n\tdamage: " << damage << "\n";
}
};
class Barrack
{
public:
virtual Unit* CreateUnit() = 0;
};
class MilitaryBarrack : public Barrack
{
public:
virtual Unit* CreateUnit() override
{
return new Marine;
}
};
class ScientistBarrack : public Barrack
{
public:
virtual Unit* CreateUnit() override
{
return new MadScientist;
}
};
class MedicalBarrack : public Barrack
{
public:
virtual Unit* CreateUnit() override
{
return new MilitaryDoctor;
}
};
void PrintMenu()
{
cout << "\n\tMenu\n";
cout << "\n1 - Military barrack\n";
cout << "\n2 - Scientist barrack\n";
cout << "\n3 - Medical barrack\n";
cout << "\nYour choice: ";
}
int main()
{
Barrack *barrack = NULL;
enum menu_items{ MILITARY = 1, SCIENTIST, MEDICAL };
system("cls");
PrintMenu();
int user_choice;
cin >> user_choice;
switch (user_choice)
{
case MILITARY:
barrack = new MilitaryBarrack;
break;
case SCIENTIST:
barrack = new ScientistBarrack;
break;
case MEDICAL:
barrack = new MedicalBarrack;
break;
default:
cout << "\nWrong choice\n";
}
system("cls");
Unit *unit = barrack->CreateUnit();
unit->Show();
return 0;
}
Мені необхідно переробити його згідно завдання:
Відредагувати ієрархію класів Барак: класи повинні викликати конструктор копії
при створенні юнітів та містити об`єкт юніта, як поле класу.
І, власне, сама проблема: я знаю, що таке конструктор копії, але правильно використати його у цій задачі в мене не виходить. Підкажіть де мені прописувати конструктори копії і де мають бути поля типу Unit?
Шось мене стопорить))
Направте, будь ласка.