С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
#1

Наследование классов и обращение к Private/Static - C++

10.09.2013, 02:37. Просмотров 760. Ответов 4
Метки нет (Все метки)

Здравствуйте! У меня возникла проблема при попытке унаследовать параметры класса...
У меня есть 2 класса. Player и Enemy. У обоих есть параметры HP, MP, UnitName, UnitLegion. Однако, только у Player есть LightPower и LegionPower, а у Enemy взамен есть DarkPower, и ChaosPower. Эти 2 параметра мне не нужно, что бы унаследовались. Однако... Они переходят от класса Player к классу Enemy(т.е. я, как бы могу к ним обратится), однако... Когда я, пытаюсь обратится к Player.LightPower(т.е. занести туда значения), мне компилятор сообщает, что LightPower не доступен...
Подскажите, в чём проблема?
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "stdafx.h"
#include <iostream>
#include <string>
#include <time.h>
#include <Windows.h>
using namespace std;
 
class Player
{
    private:int LightPower;
    private:int LegionPower;
    public:
            int HP;
            int MP;
            string UnitName;
            string UnitLegion;
};
Player You;
 
class Enemy:public Player
{
    static int DarkPower;
    static int ChaosPower;
};
Enemy Enemy;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    You.HP=100;
    You.MP=100;
    cout<<"Введите имя Вашего героя: ";
    getline(cin, You.UnitName);
    system("cls");
    cout<<"Введите имя Вашего легиона: ";
    getline(cin, You.UnitLegion);
    system("cls");
        You.LightPower=1+rand()%25;//Вот здесь мне компилятор сообщает, что нельзя обратится к LightPower(точнее, что данный параметр не доступен)... Хотя - это же класс Player...
    srand(time(0));
    int x1=0;
    int x2=0;
    int xR=0;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 02:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование классов и обращение к Private/Static (C++):

Необходим общий private static-член для всех классов, сгенерированных по шаблону - C++
Здравствуйте! Мне необходим общий private static-член для всех классов, сгенерированных по шаблону, и при этом, не хочется засорять...

Наследование static атрибута(хранение количества объектов наследуемых классов) - C++
Есть абстрактный класс base, от него наследуются 3 класса child1 child2 child3. Создается множество объектов одного из этих трех классов, в...

Private: static - C++
В хедере есть клас point, клас точек, которые должны иметь нумерацию. В поле private у него есть static атрибут free_id, в который...

Private наследование - C++
Добрый вечер, почему приходится подставлять явно ссылку на базовый класс - компилятор скушал - значит знает что внутри класса видно,...

Наследование со спецификатором доступа private - C++
Вопрос состоит в следующем. Если базовый класс наследуется со спецификатором доступа private, можно выборочно сделать некоторые его...

private наследование и виртуальный метод - C++
Привет! Тут хотел бы спросить такой вопрос. Есть базовый класс с виртуальным методом в protected секции. Я наследую этот класс как...

4
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
10.09.2013, 05:05 #2
Цитата Сообщение от Jack Wade Посмотреть сообщение
//Вот здесь мне компилятор сообщает, что нельзя обратится к LightPower(точнее, что данный параметр не доступен)... Хотя - это же класс Player...
что значит "хотя это класс player"? В классе player это поле приватное
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
10.09.2013, 10:25  [ТС] #3
alex_x_x, но ведь этот параметр(LightPower) внутри класса Player... И, почему я не могу к нему обратится внутри класса?
или, приватные параметры нельзя использовать?
В общем, подскажите пожалуйста, как мне сделать так, что бы параметры LightPower и LegionPower можно было использовать только внутри переменной Player(т.е. вводить их значения можно было бы только через Player You)?
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
10.09.2013, 10:27 #4
Цитата Сообщение от Jack Wade Посмотреть сообщение
system("cls");
You.LightPower=1+rand()%25;
didn't get it
где это внутри класса? Вы обращаетесь к его полю прямо в main'e
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
10.09.2013, 10:44  [ТС] #5
alex_x_x, я сделал для проверки функцию в private, но, почему эта функция из Player доступа у Enemy?
Подскажите, как мне тогда сделать так, что бы к части параметров можно было обращаться в Main только внутри класса(т.е. что бы параметр A был доступен только у Player You, а в Enemy Enem:Public Player)?
Вообще, как я читал, private - это параметры, которые доступны внутри функций класса, или другим "дружественным классам"... Но ведь класс Enemy у меня-не дружественный(т.е. этот класс должен унаследовать только лишь HP, MP, UnitName, UnitLegion)...
0
10.09.2013, 10:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 10:44
Привет! Вот еще темы с ответами:

А где вы используете private наследование? - C++
Насколько я знаю то при приватном наследовании наследник ничего от родительского класса не наследует. Тогда зачем оно нужно? Ничего же не...

А где вы используете private наследование? - C++
Private наследование позволяет реализовать отношение содержит, т.е. почти то же, что и встроить объект нужного класса, в теории оно...

Обращение к private полям в классе - C++
Здравствуйте! Возник еще один вопрос.Как можно обращаться к private полям класса во внешних функциях кроме как создания методов,которые...

Обращение к private полю в лямбде - C++
Добрый день, почему лямбда имеет доступ к private полю класса через его константный указатель? #include &lt;iostream&gt; class Foo...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.