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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы, Наследование классов 
:(
    Опции темы
bel_nikita
Дата 3.11.2003, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



проблема следующая:

class Base {...};

class Derived: public/private Base {...};

Возможно ли следующие наследование:

class Test: public Base, public Derived {...};


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 3.11.2003, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



да


--------------------
qqq
PM WWW   Вверх
Ars
Дата 3.11.2003, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

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



Билдер такое откомпилить не даст, да и зачем?


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
bel_nikita
Дата 3.11.2003, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



maxim1000 что значит ДА?
подскажи как реализовать таку схему
такое у меня не компилиться

Ars
class Base - некий стандартный обработчик
Derived - имеет свою обработку
Test - свою
Но при этом Derived подчинен Test'у и имее свои методы отличные от Test


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 3.11.2003, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(Ars @ 3.11.2003, 15:24)
Билдер такое откомпилить не даст, да и зачем?

Это почему? Если Base не производный от TObject, то позволяет в соответствии со стандартом С++


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ars
Дата 3.11.2003, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

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



Цитата
Если Base не производный от TObject, то позволяет в соответствии со стандартом С++

Прошу прощения, это Warning:
W8024 Base class 'Base' is also a base class of 'Derived'.
И, истинно, он прав. Какой смысл повторно наследовать от Base?

Код
class Base {...};
class Derived: public Base
{
   virtual DerivedMethod(){...};
};
class Test: public Derived{...};
{
   DerivedMethod(){другая начинка};
};

А в 6-м билдере дозволено множественное наследование и потомков TObject




--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
maxim1000
Дата 3.11.2003, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



упс...
немного ошибся
показалось, что это ничему не противоречит, а оно запрещено (по крайней мере пробовал в VC, BC)
там как раз выдаются ошибки
P.S.
а зачем така схема?


--------------------
qqq
PM WWW   Вверх
RAN
Дата 4.11.2003, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

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



По идее, принципам ООП такое определение не противоречит. Вопрос "зачем это надо", по-моему, не к месту. Мало ли зачем человеку два экземляра базового класса. Но не компилиться. Говорит, что потом к этому базовому классу не добраться.
PM MAIL ICQ   Вверх
Vyacheslav
Дата 4.11.2003, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(Ars @ 3.11.2003, 17:35)
А в 6-м билдере дозволено множественное наследование и потомков TObject

Это справедливо только для наследования интерфейсов (полнсотью абстрактных классов). Для "нормальных" классов ограничения на наследование с TObject сохраняются


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ars
Дата 4.11.2003, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

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



Цитата(RAN @ 4.11.2003, 07:14)
По идее, принципам ООП такое определение не противоречит. Вопрос "зачем это надо", по-моему, не к месту. Мало ли зачем человеку два экземляра базового класса. Но не компилиться. Говорит, что потом к этому базовому классу не добраться.

Значит, с точки зрения компиллятора это принципам ООП всетаки противоречит. Для него возникает неразрешимая неоднозначность sad.gif
Код
class TBase
{
public:
int Value;
TBase(){Value=1;};
};
class TDerived : public TBase
{
public:
TDerived(){Value=2;};
};
class TIzvrat : public TBase, public TDerived
{
public:
TIzvrat(){};
};

Код
{
TIzvrat *Izvrat=new TIzvrat();
int I=Izvrat->Value;
// Какое значение должна принять переменная I confused.gif
}



--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
shedon
Дата 4.11.2003, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Да, по-моему, это вообще чушь, за чем два раза наследовать одно и тоже?


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 4.11.2003, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



shedon
Цитата
Да, по-моему, это вообще чушь, за чем два раза наследовать одно и тоже?


Пример:

class cA {...};

class cB: public/private cA {...};

class cD: public/private cA {...};

class cE: public/private cB, public/private cD {...};

Такое допустимо, и наследуется два раза одно и тожеsmile.gif
А вот так:

class cE: public/private cB, public/private cA {...};

не работает!
Почему?sad.gif


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
shedon
Дата 4.11.2003, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Цитата
Такое допустимо, и наследуется два раза одно и тоже

Такое допустимо, т.к. ты наследуешь два разных класса(cB и cD), у которых один базовый класс, такое может быть(класс cA в таком случае наследуется не явно). А вот когда ты наследуешь cB и соответственно наследуешь cA, плюс ещё явно наследуешь cA. Зачем это нужно ?


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 4.11.2003, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



shedon
Цитата
Зачем это нужно ?

И вопрос был в том, что возможно ли реализовать такую схему? А не в том зачем это нужно? В том то все и дело, что это нужно.
Пример:

есть некоторый стандартный обработчик, допустим class cA{...} - отвечающий и обрабатывающий работу таймеров. class cB: public cA {...} - имеет свои методы на события cA.
class cС: public cA {...} - имеет свои методы на события cA.
Но в тоже время class cС должен также включать в себя методы class cB.


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 4.11.2003, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



но ведь класс cB включает методы класс cA, значит, при подключении cB в класс cC в нем и так будут методы обоих классов


--------------------
qqq
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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