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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по наследству. 
:(
    Опции темы
ShurikA
Дата 10.3.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



Если класс B наследует от А.
правильно ли:
Код

A* ptr = new B();



--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
LPBOY
Дата 10.3.2006, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да.
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
Daevaorn
Дата 10.3.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ShurikA, Если у класса A есть виртуальный деструктор, то с точки зарения языка да - правильно.
PM MAIL WWW   Вверх
maxim1000
Дата 10.3.2006, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



как раз с точки зрения языка эта конструкция правильна всегда
а виртуальный деструктор нужен для того, чтобы при уничтожении вызвать деструктор B, а не A



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


Воін дZэна
****


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

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



Цитата

как раз с точки зрения языка эта конструкция правильна всегда

правильно если
Код

class A {...};
class B: public A {...};

с точки зрения языка она все же правильна, но возможность использования только в случае выше


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
BreakPointMAN
Дата 10.3.2006, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Вопрос по наследству.

Здесь программистский форум, а не форум юридических консультаций! В языке C++ нет термина "наследство", но есть термин "наследование".


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
chipset
Дата 11.3.2006, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(Daevaorn @ 10.3.2006, 11:23 Найти цитируемый пост)
ShurikA, Если у класса A есть виртуальный деструктор, то с точки зарения языка да - правильно.

И если нету тоже. Виртуальный деструктор в реальной жизни можно и не делать, так-же как вполне можно не следовать принципам ООП там где это не требуеться. А то на RSDN некоторые уже собирались весь интерфейс std::vector переписывать. И это только потому-что, ах! (слабонервных попрошу выйти из зала) там нету виртуального деструктора smile smile
Добавлено @ 02:36
Цитата(BreakPointMAN @ 10.3.2006, 13:46 Найти цитируемый пост)
Здесь программистский форум, а не форум юридических консультаций! В языке C++ нет термина "наследство", но есть термин "наследование".

В принципе, в C++ вообще нету русских терминов так что я с тобой не соглашусь smile


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
BreakPointMAN
Дата 11.3.2006, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(chipset @ 11.3.2006, 02:34 Найти цитируемый пост)
В принципе, в C++ вообще нету русских терминов так что я с тобой не соглашусь smile

ну, я ни в одном переводном издании классических книг по C++ и книг по средам программирования на C++ не встречал термина "наследство"... smile Да и в работах русскоязычных авторов такого мне не попадалось. Ни в Страуструпе, ни в Подбельском, ни в Арханельском, ни в Круглински, ни в Александреску... да и вообще, если разобраться, термин относится не к языку, а к философии ООП.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
maxim1000
Дата 11.3.2006, 03:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(chipset @ 11.3.2006, 01:34 Найти цитируемый пост)
И если нету тоже. Виртуальный деструктор в реальной жизни можно и не делать, так-же как вполне можно не следовать принципам ООП там где это не требуеться. А то на RSDN некоторые уже собирались весь интерфейс std::vector переписывать. И это только потому-что, ах! (слабонервных попрошу выйти из зала) там нету виртуального деструктора

ну если для наследования, так проще было бы написать обертку с виртуальным деструктором (например, через private наследование или агрегацию, в конце концов)

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


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


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

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



Цитата(BreakPointMAN @ 10.3.2006, 16:58 Найти цитируемый пост)
Да и в работах русскоязычных авторов такого мне не попадалось. Ни в Страуструпе, ни в Подбельском, ни в Арханельском, ни в Круглински, ни в Александреску... да и вообще, если разобраться, термин относится не к языку, а к философии ООП.

Ладно, замнём оффтопик а то модераторы ещё поналетят smile
Цитата(maxim1000 @ 10.3.2006, 17:15 Найти цитируемый пост)
ну если для наследования, так проще было бы написать обертку с виртуальным деструктором (например, через private наследование или агрегацию, в конце концов)

Вот-вот. Именно обертку. Когда надо было всего-то, добавить какую-то несчастную push_back'y smile


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
DeadSoul
Дата 11.3.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(chipset @ 11.3.2006, 02:34 Найти цитируемый пост)
Виртуальный деструктор в реальной жизни можно и не делать


chipset, в ситуации описанной в первом посте виртуальный деструктор обязателен


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
LPBOY
Дата 11.3.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(DeadSoul @ 11.3.2006, 12:23 Найти цитируемый пост)
в ситуации описанной в первом посте виртуальный деструктор обязателен


Если он перед удалением не кастит обратно. smile
Код

delete (B*)ptr;


Это сообщение отредактировал(а) LPBOY - 11.3.2006, 12:59
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
DeadSoul
Дата 11.3.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



LPBOY, извини, но это идиотизм.


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
LPBOY
Дата 11.3.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Это не идиотизм, это была шутка юмора. smile
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
ShurikA
Дата 11.3.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


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

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



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

Я уточню вопрос:

есть класс A:
Код

class A {...};

только с виртуаьными функциями.

классы B и C:
Код

class B : public A {};
class C : public A {};

каждый из них в свою очередь перегрыжают все функции от А.

пользование:
Код

A* ptr[2];
ptr[0] = new B();
prt[1] = new C();
...
prt[0]->SomeFunction();
prt[1]->SomeFunction();


Правильно ли?


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1364 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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