Страница 1 из 1

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

Добавлено: 14 окт 2010, 13:21
xapiton

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

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') члены класса А, приват, и к ним нет доступа, когда я к ним пытаюсь напрямую обратиться.
Если их перекинуть в паблик то все работает, но пропадает инкапсуляция.
Че делать ? Как быть ?
Писать под каждый член класса метод ?

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

Добавлено: 14 окт 2010, 13:24
azrael
Можно определить value как protected, тогда наследник получит доступ к value.
А вообще нужно узнать, что вам на самом деле надо сделать.

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

Добавлено: 14 окт 2010, 13:39
xapiton
ну я карточную игру пишу.
класс Комп наследует класс Игрок. метод Игрок::Ход, в нем юзер вводит карту, Комп::Ход, в нем комп сам выбирает которой картой ходить.
Потом я смогу создать 2 обьекта (игроки):
Игрок игрок01;
Комп комп;
Игрок *игрок02 = &комп;
и использовать как обычных Игрок.

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

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