
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.188] |
![]() |
|
Страницы: (117) « Первая ... 97 98 [99] 100 101 ... 116 117 ( Перейти к последнему сообщению ) |
Сообщ.
#1471
,
|
|
|
Цитата В том то и дело, что не проще. Не прощем, чем правильно спроектировать систему? ![]() |
Сообщ.
#1472
,
|
|
|
А для того, чтобы такой возможностью не воспользоваться случайно, используется жесткое правило сокрытия имен, когда обращаясь к методу объекту производного класса "простым" способом (т. е. без явного указания имени и прочего), ты "не видишь" одноименные методы базовых классов, т. е. они не учавствуют в процессе разрешения имени.
Добавлено Цитата --Ins-- @ Не прощем, чем правильно спроектировать систему? Конечно проще. ![]() ![]() |
![]() |
Сообщ.
#1473
,
|
|
просто интересно стало, а что это за литература? |
Сообщ.
#1474
,
|
|
|
Цитата negram @ просто интересно стало, а что это за литература? из серии "С++ for dummers". ![]() |
Сообщ.
#1475
,
|
|
|
Цитата Конечно проще. Так, вы меня запутали ![]() |
Сообщ.
#1476
,
|
|
|
Цитата Flex Ferrum @ И второй момент - совсем новички о такой возможности просто не знают, т. к. в соответствующей литературе такая форма вызова метода не описывается. Да?!!! Млин. Проходил тут обучение не так уж давно... Почему-то меня не покидает ощущение, что я так вызовы и делал ![]() |
Сообщ.
#1477
,
|
|
|
Цитата Romkin @ Да?!!! Млин. Проходил тут обучение не так уж давно... Почему-то меня не покидает ощущение, что я так вызовы и делал ![]() Есть разные контексты использования подобных консрукций. Упомянутый мною их вид действительно очень редко используется. ![]() |
Сообщ.
#1478
,
|
|
|
Цитата И второй момент - совсем новички о такой возможности просто не знают, т. к. в соответствующей литературе такая форма вызова метода не описывается. Да не играет это роли никакой... ![]() |
Сообщ.
#1479
,
|
|
|
Цитата --Ins-- @ Так как что это за объектный язык такой, в который встроены механизмы, предназначенные для того, чтобы обходить ограничения ООП, нарушая тем самым его принципы. Причем замечу, ограничения умышленные, а не вынужденные. Если тебе хочется программировать в полном соответствии с фундаментальными принципами ООП - то тебе лучше всего взять SmallTalk или что-нибудь типа Eiffel. ![]() ![]() ![]() Добавлено Цитата --Ins-- @ Причем замечу, ограничения умышленные, а не вынужденные. В языке есть определенных набор фундаментальных правил, описывающих, в том числе, механизм интерпретации имен, поиска идентификаторов, и проч. проч. проч. В данном случае, есть правило "квалифицированного" и "неквалифицированного" имени. Для квалифицированных имен везде используются одни правила. Для неквалифицированных - везде другие. Делать исключения типа "если имя - полностью квалифицировано, при этом ссылается на виртуальную функцию, то компилятор должен быть программиста порукам" - это увеличивать объем и без того пухлого и сложного стандарта. Если программист дурак - то ему такие ограничения не помогут. А умный - каждую возможность будет применять там, где в этом есть необходимость. Или это не очевидно? |
Сообщ.
#1480
,
|
|
|
Цитата Flex Ferrum @ Ибо в том же Паскале я могу, спустившись на уровень голых указателей, положить большой болт на все принципы, и наворотить столько дров, что мама дорогая. ![]() Например? |
Сообщ.
#1481
,
|
|
|
Цитата Если тебе хочется программировать в полном соответствии с фундаментальными принципами ООП - то тебе лучше всего взять SmallTalk или что-нибудь типа Eiffel. ![]() ![]() Цитата Ибо в том же Паскале я могу, спустившись на уровень голых указателей, положить большой болт на все принципы, и наворотить столько дров, что мама дорогая. Или не могу? Можете. А если спуститься на уровень машинных команд - то тем более. Но в C++, как я вижу, даже на этот уровень спускаться не нужно. Это заложено на уровне объектов и классов. Цитата Если программист дурак - то ему такие ограничения не помогут. А умный - каждую возможность будет применять там, где в этом есть необходимость. Или это не очевидно? Вот мне интересно... В Delphi, например, членам классов можно задавать различные модификаторы видимости - private, public и т.д. Полагаю, в C++ - тоже, может иначе называются, да не суть. Может в C++ есть какие-нибудь механизмы, открывающие доступ к закрытым членам класса? А что, ведь если программист умный, то он сможет использовать это с пользой, а если дурак, то дураки не в счет ![]() Добавлено Цитата Например? Я действительно могу в Delphi проделать то же самое - вызвать виртуальный метод родителя, дедушки - не важно кого, даже если в моем классе он перекрыт. Но правила языка сделать это мне не позволяют. Мне позволяет сделать это знание внутреннего устройства объектов и классов. Которое не является документированным. |
Сообщ.
#1482
,
|
|
|
Цитата --Ins-- @ Может в C++ есть какие-нибудь механизмы, открывающие доступ к закрытым членам класса? А что, ведь если программист умный, то он сможет использовать это с пользой, а если дурак, то дураки не в счет ![]() Да, в определенных случаях, если очень извратиться и захотеть - можно получить доступ к закрытым членам. Но, опять же, случайно это сделать практически невозможно. Цитата --Ins-- @ Но в C++, как я вижу, даже на этот уровень спускаться не нужно. Это заложено на уровне объектов и классов. С++ - это мультипарадигменный язык. И не ставит своей задачей заставить программиста писать правильно. Во многих местах там подложена соломка, в каких то случаях - даст по рукам. Но если программист хочет отхватить себе палец - мешать ему в этом не будет, т. к. на злобных дендромутантов не рассчитан. ![]() |
Сообщ.
#1483
,
|
|
|
Цитата Да, в определенных случаях, если очень извратиться и захотеть - можно получить доступ к закрытым членам. Но, опять же, случайно это сделать практически невозможно. Это тоже на уровне языка позволено? ![]() |
Сообщ.
#1484
,
|
|
|
Ну и почему ? |
Сообщ.
#1485
,
|
|
|
Цитата С++ - это мультипарадигменный язык. Угу. Я тоже так считаю. Только несколько перефразирую - это некий "универсальный" инструмент, который подобен длинному древку с лопатой на одной стороне, и с граблями на другом. Начинаешь копать - грабли мешают. А стоит на эти грабли случайно наступить - получишь по лбу лопатой ![]() |