Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> абстрактные классы 
V
    Опции темы
GoldFinch
Дата 4.4.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



извиняюсь за название темы, но в этом разделе и не такое было)

есть два абстрактных класса,
Код

struct AbsA { virtual void foo() = 0; };
struct AbsB : AbsA { virtual void bar() = 0; };

их менять нельзя

и есть конкретный класс
Код

struct CB : AbsB
{
   void foo() {}
   void bar() {}
};

int main()
{
   CB f;
}


хочу разбить этот конкретный класс на два, примерно вот так:
Код

struct CA : AbsA
{
   void foo() {}
};

struct CB : CA, AbsB
{
   void bar() {}
};

int main()
{
   CB f;
}

при этом получаю ошибку, что CB абстрактный, т.к. CB::AbsB::foo не реализован

можно ли тут что-то сделать?
PM MAIL ICQ   Вверх
GoldFinch
Дата 4.4.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



разумеется если написать
struct AbsB : virtual AbsA { virtual void bar() = 0; };
struct CA : virtual AbsA

то проблема решена,
но AbsB менять нельзя
PM MAIL ICQ   Вверх
mes
Дата 4.4.2010, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Если нужно наследование реализаторов (а наследованиие абстрактных классов по заданию исключать нельзя), то только через определение нужной функции.
Если наследование реализаторов как таковое не нужно, и используется для исключения дублирования кода, то тогда можно извратиться с шаблонами,
типа такого :
Код


template <class Base>
struct TA : Base 
{ 
   void foo() {}  
};
template <class Base>
struct TB : TA<Base>
{ 
   void bar() {}  
};


хотя, имхо,  это  и возможно другие решения являются костылями, для устрамнения проблемы, созданной неправильно сконструированными абс. классами.. 
и по возможности желательно изменить именно  то, чего Вы запретили smile



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.