Dzedziczenie zmiennych prywatnych

0

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()
{

}
 
0
  1. Ten kod jest bardzo bardzo słaby
  2. Sam go w ogóle pisałeś? Bo po coś te "friend" tam chyba dałeś, a teraz o to pytasz. WTF?
0

@Jonki1997 Usuń tą część

friend class Game;

Z tych klas Wizard Warrior Archer i zobaczysz że już nie będziesz mógł.

https://pl.wikipedia.org/wiki/Klasa_zaprzyja%C5%BAniona

1 użytkowników online, w tym zalogowanych: 0, gości: 1