Nie mogę zrozumieć dlaczego w funkcji Game::new_game mogę posługiwać się zmiennymi klas Warrior, Wizard i Archer jak publicznymi, skoro są odziedziczone prywatnie.
headlines.h
#include <iostream>
#include <stdio.h>
using namespace std;
typedef void v;
class Game
{
public:
v new_game();
v load_game();
};
class Heroes
{
protected:
string name;
int HP, strength, lvl, experience;
public:
void lvl_up();
};
class Warrior :private Heroes
{
public:
Warrior()
{
strength = 30;
HP = 75;
lvl = 1;
experience = 0;
}
~Warrior(){}
friend class Game;
};
class Wizard :private Heroes
{
public:
Wizard()
{
strength = 15;
HP = 100;
lvl = 1;
experience = 0;
}
~Wizard(){}
friend class Game;
};
class Archer :private Heroes
{
public:
Archer()
{
strength = 25;
HP = 90;
lvl = 1;
experience = 0;
}
~Archer(){}
friend class Game;
};
e
class Player :private Heroes
{
public:
Player(int hp, int streng, int lv, int exper, string nam)
{
HP = hp;
strength = streng;
lvl = lv;
experience = exper;
name = nam;
}
~Player(){}
};
menu_functions.cpp
#include <conio.h>
#include <stdio.h>
#define cls system("cls")
using namespace std;
Warrior war;
Wizard wiz;
Archer arch;
void Game::new_game()
{
string name;
char choose;
cls;
cout << "Choose your hero!" << endl << endl;
cout << "1. Warrior" << endl;
cout << "2. Wizard" << endl;
cout << "3. Archer" << endl << endl;
cout << "Choose: ";
choose = getch();
cls;
cout << endl << "Input name: ";
cin >> name;
switch(choose)
{
case '1':
{
Player user(war.HP, war.strength, war.lvl, war.experience, name);
break;
}
case '2':
{
Player user(wiz.HP, wiz.strength, wiz.lvl, wiz.experience, name);
break;
}
case '3':
{
Player user(arch.HP, arch.strength, arch.lvl, arch.experience, name);
break;
}
default:
{
cls;
cout << "Please input numer!";
Sleep(2000);
}
}
}
void Game::load_game()
{
}