неполучается виртульный метод

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
xapiton
Сообщения: 5
Зарегистрирован: 25 окт 2009, 18:10

Код: Выделить всё

class A
{
private:
 int value;
public:
 virtual int Method ( int _value );
};

class B : public class A
{
private:
public:
 int Method ( int _value ); //использует члены класса А (родительского)
};
Не могу переопределить Method(). 8я Студия ругается (выдает ошибку C2248: 'A::value' cannot access private member declared in class 'A') члены класса А, приват, и к ним нет доступа, когда я к ним пытаюсь напрямую обратиться.
Если их перекинуть в паблик то все работает, но пропадает инкапсуляция.
Че делать ? Как быть ?
Писать под каждый член класса метод ?
azrael
Сообщения: 89
Зарегистрирован: 31 май 2009, 15:30
Контактная информация:

Можно определить value как protected, тогда наследник получит доступ к value.
А вообще нужно узнать, что вам на самом деле надо сделать.
xapiton
Сообщения: 5
Зарегистрирован: 25 окт 2009, 18:10

ну я карточную игру пишу.
класс Комп наследует класс Игрок. метод Игрок::Ход, в нем юзер вводит карту, Комп::Ход, в нем комп сам выбирает которой картой ходить.
Потом я смогу создать 2 обьекта (игроки):
Игрок игрок01;
Комп комп;
Игрок *игрок02 = &комп;
и использовать как обычных Игрок.
azrael
Сообщения: 89
Зарегистрирован: 31 май 2009, 15:30
Контактная информация:

Тогда, видимо, если Method записывает в value номер карты, то в реализации этого метода в классе B нужно произвести необходимые действия по определению хода, а затем просто вызвать A::Method(blabla) внутри B::Method.
Я бы определил интерфейс для классов игрока-человека и компа, т.к. скорее всего, поля у них будут отличаться.
Ответить