Текущий архив: 2008.09.07;
Скачать: CL | DM;
Вниз
inherited в C++ Найти похожие ветки
← →
@!!ex © (2008-07-17 17:44) [0]Есть виртуальны метод Method(bool NeedParent) в базовом классе BaseClass.
Есть наследник, перекрывающий виртуальный метод NewClass.
Не понимаю как сделать следующее:
Вызвать NewClass->Method.
который бы в зависимости от параметра NeedParent, либо обрабатывался бы в новом методе, либо вызывался метод предка.
Как в дельфи я знаю... inherited рулит... а как в С++???
← →
rule © (2008-07-17 17:54) [1]Parent::Method();
← →
@!!ex © (2008-07-17 17:54) [2]я так и думал. :(
← →
rule © (2008-07-17 17:55) [3]а что помешало проверить ??? :-)
← →
@!!ex © (2008-07-17 17:57) [4]Да я уж напроверялся, потом переписывать все. :)))
А в деструкторе NewClass нужно вызывать деструктор предка??
← →
wicked © (2008-07-17 18:02) [5]
> А в деструкторе NewClass нужно вызывать деструктор предка?
> ?
нет
← →
@!!ex © (2008-07-17 18:03) [6]> [5] wicked © (17.07.08 18:02)
а почему?
← →
Alkid (2008-07-17 18:11) [7]
> а почему?
Вызывается автоматически. Почти так же обстоит дело с конструкторами.
← →
rule © (2008-07-17 18:21) [8]
> @!!ex ©
Спроси у Страуструпа :-) он очень сильно старался и писал очень хорошую книгу, чтоб рассказать что и как нада делать с придуманным им языком :-)
← →
@!!ex © (2008-07-17 18:29) [9]> [8] rule © (17.07.08 18:21)
Я читал.... видимо невнимательно...
← →
Mystic © (2008-07-17 18:39) [10]> а почему?
Если вкратце, то так велит Великий Стандарт Языка
← →
Mystic © (2008-07-17 18:43) [11]> Я читал.... видимо невнимательно...
Страуструпа надо раз пять прочесть. Такой уж язык он придумал.
← →
ketmar © (2008-07-17 21:31) [12]>[11] Mystic © (2008-07-17 18:43:00)
>Страуструпа надо раз пять прочесть. Такой уж язык он придумал.
и всё равно не поможет. потому что язык был придуман для просчёта синтеза психотропных веществ, который страус задолбался считать на листочках.
---
All Your Base Are Belong to Us
← →
Alkid (2008-07-17 23:20) [13]
> >[11] Mystic © (2008-07-17 18:43:00)
> >Страуструпа надо раз пять прочесть. Такой уж язык он придумал.
>
> и всё равно не поможет. потому что язык был придуман для
> просчёта синтеза психотропных веществ, который страус задолбался
> считать на листочках.
Ну вообще-то над ним начали работать, что бы писать на нем симулятор сети.
← →
ketmar © (2008-07-17 23:22) [14]>[13] Alkid (2008-07-17 23:20:00)
насколько я помню, страус что-то считал на симуле, кажется (или на чём-то подобном). а оно было жутко медленным. страус решил взять быстрый C и испортить в меру своей тупости.
---
Do what thou wilt shall be the whole of the Law.
← →
Игорь Шевченко © (2008-07-17 23:43) [15]ketmar © (17.07.08 23:22) [14]
Чтоб тебе быть хоть на тысячную долю таким тупым, как Страуструп...
← →
Alkid (2008-07-18 10:11) [16]
> ketmar © (17.07.08 21:31) [12]
> и всё равно не поможет. потому что язык был придуман для
> просчёта синтеза психотропных веществ, который страус задолбался
> считать на листочках.
> насколько я помню, страус что-то считал на симуле, кажется
> (или на чём-то подобном). а оно было жутко медленным. страус
> решил взять быстрый C и испортить в меру своей тупости.
У тебя какие-то комплексы по отношению к Страуструпу?
:)
← →
rule © (2008-07-18 10:55) [17]Вот помоему С++ как раз самый живучий язык пока на планете. И наследники (Джава там, ПХП, Рубби ...) они все то взяли очень многие идеи именно от С++, и не важно что страуструм сам опирался на существующую модулу, важно что было потом и что есть сейчас. С++ жил, жив и будет жить. :-) Так что я думаю Страуструп очень даже клевый чувак ... может он гей, может он фашист, я не знаю, но то что он не тупой, в этом я точно уверен.
И книга у него написана очень даже доступно и разжевано. То что там очень много информации, и тяжелой для восприятия за один раз.
← →
Mystic © (2008-07-18 12:02) [18]> Вот помоему С++ как раз самый живучий язык пока на планете.
> И наследники (Джава там, ПХП, Рубби ...) они все то взяли
> очень многие идеи именно от С++
Про руби не скажу, но Java и PHP имеют C-подобный синтаксис. Большая часть идей С++ так и осталась в C++ :) А популярность C++ во многом следствие совместимости с языком C.
← →
Alkid (2008-07-18 12:23) [19]
> Большая часть идей С++ так и осталась в C++ :)
Крайне спорное утверждение.
> А популярность C++ во многом следствие совместимости с языком
> C.
Уточню - старт популярности произошёл именно по этой причине.
← →
Mystic © (2008-07-18 13:21) [20]> Крайне спорное утверждение.
Хорошо, давай конкретно перечислять. На основании моих знаний:
Исключения. Механизм исключений есть в Ada. В C++ механизм исключений дополнился возможностью передавать не только тип исключения, но и конкретный объект. Согласен, это была продуктивная идея.
Перегрузка операторов. Приоритета C++ в этом нету, перегрузка операторов была еще в Algol. Prolog предоставляет более гибкие механизмы перегрузки: для каждого оператора задается лексема, инфиксность и приоритет. Перегрузка функций в C++ имеет ту характерную особенность, что она привязана к наиболее эффективному способу генерации кода для целевой машины. Эта идея не получила дальнейшего своего распространения. Перегрузка операций в C# ближе все-же к Ada.
Реализация объектов. C++ один из немногих языков (других я не знаю), где объекты могут создаваться как в стеке, так и в куче. Конечно, стандарт не уделяет внимания вопросам реализации, но описано это так, что наиболее простой и понятный способ реализации есть помещение объектов в стек. Сделано опять же из-за соображений производительности. Мне неизвестны другие языки, в которых был предпринят такой подход (кроме может быть object в паскаль).
Система приведений типов объектов. В C++ она очень богатая, но большого развития не получила. Сюда же можно добавить static_cast, reinterpret_cast, ... которые также есть только в C++.
Множественное наследование. Встречается только в скриптовых языках, да и там оно совсем-совсем другое.
Шаблоны. Частично взяты с Ada, так что концепция не нова. Предоставляют новые возможности метапрограммирования, которое также не получило распространения в наследниках. Подобная возможность (и только она) изначально присутсвует в функциональных языках, поэтому говорить о том, что ФЯ взяли ее с С++, имхо, некорректно.
Константность. Та часть, что используется только для параметров функций, давно была в Ada (in, out, access). А вот константные объекты, mutable и прочее, константные методы я особо в других языках не замечал.
Модификаторы области видимости. Опять же в точности такой же системы, как в C++, я не встречал. public, private, protected остались. private наследование не знаю. В C++ модификатор доступа может быть только усилен (public => protected => private). Опять же private наследование... Все это специфично для C++. А сама идея разденения на private/protected/public кажется настолько естественным, что вероятнее всего было до C++ (надо смотреть в сторону Modula).
Наследование, виртуальные функции. В этом механизме больших изменений не возникло, но опять же кажется, что это было до. Кроме, может быть, абстрактных функций и классов. Эта идея оказалась плодотворной.
В сумме я вижу не так уж и много...
← →
Alkid (2008-07-18 14:49) [21]
> Хорошо, давай конкретно перечислять. На основании моих знаний:
Что же, наверное в итоге соглашусь с такой постановкой вопроса.
> Перегрузка операций в C# ближе все-же к Ada.
Можно поподробнее об этом? Просто я пока не вижу *существенных* различий между перегрузкой операторов в C++ и в С#.
> Мне неизвестны другие языки, в которых был предпринят такой
> подход
В C# можно value-типы (структуры) на стеке создавать.
Кстати, возможность делать автоматические объекты пользовательских типов в С++ является (для меня) одной из самых привлекательных возможностей, ибо позволяет применять многие хорошие техники программирования.
> А сама идея разденения на private/protected/public кажется
> настолько естественным, что вероятнее всего было до C++
> (надо смотреть в сторону Modula).
C++ пропионерил концепцию protected-членов класса.
В остальном соглашусь.
← →
Mystic © (2008-07-18 15:43) [22]
> Можно поподробнее об этом? Просто я пока не вижу *существенных*
> различий между перегрузкой операторов в C++ и в С#.
Вот страничка описания стандарта Ada"83
http://archive.adaic.com/standards/83lrm/html/lrm-06-07.html
По стандарту Ады переименовывать нельзя присваивание, точку, возможно другие операторы, которые имеют специальное назначение. C++ пошел в этом пути дальше, там переименовывать можно если не все, то многое, что иногда дает весьма забавные эффекты. С# же в этом вопросе откатился на позиции Ada: нельзя перегружать =, ., ?:, ->, new, is, sizeof, typeof. Зачастую стандарт C++ описывает подробно смысл, в котором перегружается оператор. Более того, соглашения по поводу перегрузки операций ++ и -- в языке C# в общем случае менее эффективны, чем те, которые в C++. Но более человечны, что-ли... Скажем, уже без разницы, как писать цикл:
for(SomeTime i = startValue; i < lastValue; ++i)
или
for(SomeTime i = startValue; i < lastValue; i++)
А вот знакомство с особенностями C++ приучило меня к первому варианту.
> В C# можно value-типы (структуры) на стеке создавать.
> Кстати, возможность делать автоматические объекты пользовательских
> типов в С++ является (для меня) одной из самых привлекательных
> возможностей, ибо позволяет применять многие хорошие техники
> программирования.
value типы можно и в куче хранить (boxing-unboxing), но все-же как для меня это совсем немного другая концепция. Конечно, в том что реализовано в C++ есть свои привлекательные черты. Например, создавая переменные в стеке мы не мусорим, поэтоому нет острой потребности в сборке мусора. Если добавить weak pointers, то проектировать системы, в которых сборка мусора не требовалась бы, становится не так уж проблемно. Но мы разговариваем о том, что другие языки подхватили.
> C++ пропионерил концепцию protected-членов класса.
Да, это оказалось достаточно полезно. Но эту концепцию трудно назвать революционной.
← →
passing by (2008-07-18 16:04) [23]>> А в деструкторе NewClass нужно вызывать деструктор предка?
>> Вызывается автоматически.
покури на всякий случай виртуальные деструкторы
← →
wl © (2008-07-18 16:43) [24]
> passing by (18.07.08 16:04) [23]
причем тут?
что, по твоему выведется на экран в таком коде:
#include <iostream>
class a
{
public:
~a() { std::cout << "~a "; }
};
class b: a
{
public:
~b() { std::cout << "~b "; }
};
int main()
{
b _b;
}
← →
Alkid (2008-07-18 17:00) [25]
> wl © (18.07.08 16:43) [24]
Будет
~b~a
Гораздо интереснее, что будет, если b от a унаследуется публично, а main() будет иметь вид:int main()
{
std::auto_ptr<a> b(new b());
}
← →
Alkid © (2008-07-18 17:00) [26]
> std::auto_ptr<a> b(new b());
> }
Идентификатор поинтера - _b, описался :)
← →
wl © (2008-07-18 17:08) [27]ну тут удаление через базовый класс, нужна виртуальность деструктора конечно же. Собственно в этом его и задача насколько я понимаю
← →
GrayFace © (2008-07-18 20:05) [28]rule © (18.07.08 10:55) [17]
Так что я думаю Страуструп очень даже клевый чувак ... может он гей, может он фашист, я не знаю, но то что он не тупой, в этом я точно уверен.
Вот так и знал, что С++ придумал гей-фашист! :)
← →
ketmar © (2008-07-18 22:00) [29]>[15] Игорь Шевченко © (2008-07-17 23:43:00)
>Чтоб тебе быть хоть на тысячную долю таким тупым, как Страуструп…
тогда меня запрут в палату с мягкими стенами.
>[16] Alkid (2008-07-18 10:11:00)
>У тебя какие-то комплексы по отношению к Страуструпу?
мне-то что, я не вынужден пользоваться его бредом.
>[17] rule © (2008-07-18 10:55:00)
>И наследники (Джава там, ПХП, Рубби …) они все то взяли очень многие идеи именно
>от С++
бугога. жги ещё.
>И книга у него написана очень даже доступно и разжевано. То что там очень много
>информации, и тяжелой для восприятия за один раз.
язык Lua в одном файле на 300 кил сочетает документацию по языку, стандартным библиотекам и C API. этого достаточно, чтобы не только выучить, но и спокойно оный язык использовать. при этом в языке есть средства для создания классов, исключений, перегрузки операторов и ещё куча вкусностей.
язык Objective C отличается от C фактически одной добавленой конструкцией. для её понимания достаточно пары страниц текста и нескольких примеров.
так что «много тяжелой для восприятия информации» означает лишь, что описывают тяжёлую и неповоротливую дуру. что и не удивительно, если учесть, что у цпп не было даже дизайн-документа.
---
All Your Base Are Belong to Us
← →
GrayFace © (2008-07-19 00:39) [30]ketmar © (18.07.08 22:00) [29]
язык Lua в одном файле на 300 кил сочетает документацию по языку, стандартным библиотекам и C API. этого достаточно, чтобы не только выучить, но и спокойно оный язык использовать. при этом в языке есть средства для создания классов, исключений, перегрузки операторов и ещё куча вкусностей.
Как я понял, полной справкой по Lua можно считать только книгу "Programming in Lua".
← →
ketmar © (2008-07-19 13:42) [31]>[30] GrayFace © (2008-07-19 00:39:00)
нет. это как раз набор хитропопых техник. до которых любой может дойти после чтения стандартной документации. всё, что делает PiL — сокращает «время вхождения» для совсем ньюбов.
лично я учил Lua по мануалу. и не только я. PiL тогда вообще не было. %-)
хотя нельзя не признать, что код в книге весьма изящный, и вообще для прочтения использующим Lua всяко рекомендуется. но не обязательно, скорее всего, ничего кроме эстетического удовольствия там не найдётся.
---
Do what thou wilt shall be the whole of the Law.
← →
guav © (2008-07-19 14:14) [32]Так и по С++ не обязательно Страуструпа читать. Вот я не читал, а синтаксис по MSDN освоил, без всяких многократных прочтений. Книги, что я читал по С++, - это всё тоже набор техник, до которых можно и самому дойти.
> язык Lua в одном файле на 300 кил
Мне кажется, что ты сравниваешь разные весовые категории. Динамически типизированный скриптоязык, требующий компилятора/интерпретатора на целевой платформе vs портабельный статически типизированный объектно-ориентироавнный ассемблер. Понятно, что второе будет сложнее.
← →
ketmar © (2008-07-19 15:47) [33]>[32] guav © (2008-07-19 14:14:00)
разница в том, что Lua предоставляет инструменты, а цпп — решения. отсюда цпп уродлив и сложен.
опять же — сравни цпп и Objective C. я бы не сказал, что Objective C менее выразителен (скорее наоборот), но добились этого намного более изящным методом. потому что сначала думали, а потом делали. страус же — ровно наоборот.
---
All Your Base Are Belong to Us
← →
Alkid (2008-07-19 17:45) [34]
> разница в том, что Lua предоставляет инструменты, а цпп
> — решения. отсюда цпп уродлив и сложен.
Все языки предоставляют инструменты и ни один - решения.
> опять же — сравни цпп и Objective C. я бы не сказал, что
> Objective C менее выразителен (скорее наоборот), но добились
> этого намного более изящным методом.
:) Мда. Как будет выглядеть типобезопасный универсальный контейнер на Objective-C? Хотя бы аналог vector`а из STL?
> потому что сначала думали, а потом делали. страус же — ровно
> наоборот.
Сдается мне, что ты именно так письма пишешь. Сначала пишешь, потом думаешь. Это я к чему - на словах опустить можно все что угодно, если не заворачиваться попыткой избрать некую систему объективных критериев и провести честное сравнение. Естественно гораздо проще поступать по принципу - "мне не нравится => плохое", заменяя предметную аргументацию обидными эпитетами и коверкая имя Страуструпа.
P.S. Выбор Lua и Objective-C на роль ниспровергателей С++ достаточно неудачен, ибо первый вообще из другой весовой категории, а Objective-C - весьма специфический язык, по сути помесь чистого С (и его недостатков) и Smalltalk. И этот язык даже близко по используемости не добрался до уровня С++.
P.P.S. А ты часом не линуксоид? :)
← →
ketmar © (2008-07-20 14:09) [35]>[34] Alkid (2008-07-19 17:45:00)
>Все языки предоставляют инструменты и ни один — решения.
if you please, покажи мне способ создать в цпп свою реализацию классов.
>Как будет выглядеть типобезопасный универсальный контейнер на Objective-C?
ты на шаблоны намекаешь? %-) а я спрошу другое: а зачем?
>заменяя предметную аргументацию обидными эпитетами и коверкая имя
>Страуструпа.
а мне лениво к каждому посту прикладывать телегу. и да — я такое вот быдло: не уважаю ни страуса, ни его поделие. и потому невозбранно коверкаю имена и названия.
>на роль ниспровергателей С++
да при чём тут «ниспровергатели»? я просто привёл примеры хорошего дизайна, а вовсе не имел в виду «все бросам цпп и переходим на …»
>И этот язык даже близко по используемости не добрался до уровня С++.
бугога.а эппл и не в курсе.
>А ты часом не линуксоид? :)
угадал, зараза! %-) уже два года, как «чистый», винды вообще нет. %-)
---
Understanding is not required. Only obedience.
← →
Alkid (2008-07-20 14:32) [36]Вот это:
> а мне лениво к каждому посту прикладывать телегу. и да —
> я такое вот быдло: не уважаю ни страуса, ни его поделие.
> и потому невозбранно коверкаю имена и названия.
плюс вот это:
> >А ты часом не линуксоид? :)
> угадал, зараза! %-) уже два года, как «чистый», винды вообще
> нет. %-)
Собственно говоря, за сим предлагаю окончить дискуссию, как неконструктивную.
И тут дело не в том, что я против Линукса или кроме С++ других языков не разумею. Я вообще считаю себя агностичным по отношению к инструментарию.
Тут дело в том, что спорить с человеком, который врывается в чужой разговор с целью заявить "а баба Яга против!", хотя люди обсуждают вполне конкретные вещи - бесполезно.
Это, не знаю как сказать... какая-то форма эксгибиционизма, наверное. Вообщем, давайте не будем тратить место на сервере, держащем форум :)
← →
ketmar © (2008-07-20 20:05) [37]>[36] Alkid (2008-07-20 14:32:00)
ну и фэхоа с ним.
---
Understanding is not required. Only obedience.
← →
Mystic © (2008-07-21 12:03) [38]
> Так и по С++ не обязательно Страуструпа читать. Вот я не
> читал, а синтаксис по MSDN освоил, без всяких многократных
> прочтений. Книги, что я читал по С++, - это всё тоже набор
> техник, до которых можно и самому дойти.
Не верю. Разве что в стиле C с классами.
← →
wl © (2008-07-21 12:29) [39]часто этого более чем достаточно
← →
guav © (2008-07-21 12:49) [40]> [38] Mystic © (21.07.08 12:03)
> Не верю. Разве что в стиле C с классами.
Чтобы не задавать вопросов типа [0] достаточно освоить на уровне С++ с классами. Вопрос действительно по синтаксису. Кейворд inherited можно не пытаться искать хотя бы потому что в С++ есть множетсвенное наследование реализации.
Что касается тру С++, у меня получилось освоить С++ с правильным использованием RAII, с шаблонными трюками, с применением STL и бустовских либ безо всяких книг, чисто на практике.
Страницы: 1 2 вся ветка
Текущий архив: 2008.09.07;
Скачать: CL | DM;
Память: 0.6 MB
Время: 0.018 c