BreakPointMAN |
Отправлено: 25.07.2005, 21:59 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Недавно решил перечитать А.Я. Архангельского "Программирование на C++ Builder 6", чтобы вспомнить некоторые уже подзабытые веСЧи... и наткнулся на следующий бред (по-другому назвать сей фрагмент текста у меня язык не поворачивается) -
QUOTE |
Элементы (переменные и функции), объявленные в классе в разделе private, видимы и доступны только внутри данного модуля. При этом из функций, объявленных внутри класса, к ним можно обращаться непосредственно по имени, а из других функций — только со ссылкой на объект данного класса. В рассмотренном примере это относится к процедуре F1. Если в модуле описано несколько классов, то объекты этих классов взаимно видят элементы, описанные в их разделах private.
Элементы, объявленные в классе в разделе public, видимы и доступны для объектов любых классов и для других модулей, в которых директивой #include включен заголовочный файл данного модуля. При этом из объектов того же класса, к ним можно обращаться непосредственно по имени, а из других объектов и процедур — только со ссылкой на объект данного класса. В рассмотренном примере это относится к переменной Ch1 и процедуре F2.
В классах, помимо обсуждавшихся ранее, могут быть еще разделы protected — защищенные. Элементы, объявленные в классе в разделе protected, видимы и доступны для любых объектов внутри данного модуля, а также для объектов классов-наследников данного класса в других модулях. Объекты из других модулей, классы которых не являются наследниками данного класса, защищенных элементов не видят.
Архангельский А.Я. — "Программирование в C++ Builder 6", Москва, издательство БИНОМ, 2004 г.
(глава 1, раздел 1.9.5.4 "Области видимости переменных и функций" — стр. 56)
|
В принципе, все три абзаца — бред от начала до конца, но некоторые моменты я выделил красным...
Поправьте меня, если я ошибаюсь, но разве здесь нет смысловых ошибок?
Если нет — то пойду перечитывать Страуструпа и всех остальных вместе с ним...
ps: под модулем здесь подразумевается cpp- или h-файл, в котором описывается/определяется класс...
...::: всё вышесказанное — чистое имхо :::...
|
|
Георгий |
Отправлено: 25.07.2005, 23:22 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
да, это БРЕД. но только частично — если постараться, то можно из этй мозаики сложить целую картину и догадаться, что же имел ввиду Архангельский (ну или те, кто от его имени пишут). |
|
Лена |
Отправлено: 26.07.2005, 09:56 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Это из первого издания книги или это из нового второго издания? |
|
Asher |
Отправлено: 26.07.2005, 10:29 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
В его книге по пятому билдеру такая-же ахинея. Слово в слово.
Язык надо учить по первоисточникам, а не в кратком вольном пересказе
|
|
BreakPointMAN |
Отправлено: 26.07.2005, 11:01 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
QUOTE (Лена @ 26/07/2005, 09:56) | Это из первого издания книги или это из нового второго издания? |
Это первое издание...
ммм... а для интереса — у кого если второе издание есть — посмотрите, исправлена ли эта ошибка?.. в первом издании — их море (я уже не говорю про орфографические и пунктуационные ошибки и опечатки...); очень и очень грустно... Потому что книга чисто как описание среды BCB мне нравиццца... По крайней мере, лучше я еще пока не видел...
|
|
Doga |
Отправлено: 26.07.2005, 12:06 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Зато грамматических ошибок нет!
|
|
BreakPointMAN |
Отправлено: 27.07.2005, 23:13 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
QUOTE (Doga @ 26/07/2005, 12:06) | Зато грамматических ошибок нет! |
Хороший юмор!
грустно, правда...
|
|
olegenty |
Отправлено: 28.07.2005, 08:40 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Б. Страуструп поможет... Ничего лучше по С++ не доводилось читать...
|
|
flint |
Отправлено: 28.07.2005, 13:10 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
Интересно, откуда Страуструп так хорошо знает С++? |
|
Doga |
Отправлено: 28.07.2005, 15:37 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Подозреваю, он на короткой ноге с самим автором
|
|
olegenty |
Отправлено: 28.07.2005, 16:15 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
угу, у него с автором на двоих одна нога (он один из разработчиков языка)
|
|
Doga |
Отправлено: 28.07.2005, 16:24 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
НЕ МОЖЕТ БЫТЬ!!! Кто бы мог подумать!
|
|
flint |
Отправлено: 29.07.2005, 07:32 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 58
|
Ага... Вот это да... Писатель книжек — автор языка. Да такого быть не может! |
|
Sl@Sh |
Отправлено: 09.09.2005, 15:41 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Сразу скажу, что моё ИМХО далеко не как профи, но из всего приведеного текста неправильным есть только :
При этом из функций, объявленных внутри класса, к ним можно обращаться непосредственно по имени, а из других функций — только со ссылкой на объект данного класса. В рассмотренном примере это относится к процедуре F1
Дело в том, что своё ИМХО я сразу проверил. А проверял именно каждое написаное предложение. И только Приведеный вверху текст не ответствовал действительности.
P.S.: Просто высказываю своё не профессиональное мнение. Подскажите если не прав.
|
|
Asher |
Отправлено: 09.09.2005, 16:00 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
На любую попытку доступа, описанную в выделеных красным предложениях, вы получите
is not accessible
И если к protected еще можно достучаться из потомков или друзей, то к привате — только из друзей класса.
И дружба не наследуется.
|
|
Sl@Sh |
Отправлено: 10.09.2005, 17:27 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Не понял смысл вашего ответа, Asher. Вот взять ходябы первое предложение (цитаты из книги). Разве к private я смогу получить доступ вне данного класса. Именно об этой невозможности и пишет Архангельский. Это ведь на бред не похоже.
Отредактировано Sl@Sh — 10/09/2005, 17:28
|
|
Asher |
Отправлено: 12.09.2005, 08:20 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
Кхм... Извине Sl@Sh? но вы точно внимательно читаете что там написано? Разбираем по высказываниям.
QUOTE | Элементы (переменные и функции), объявленные в классе в разделе private, видимы и доступны только внутри данного модуля. При этом из функций, объявленных внутри класса, к ним можно обращаться непосредственно по имени, а из других функций — только со ссылкой на объект данного класса. В рассмотренном примере это относится к процедуре F1. Если в модуле описано несколько классов, то объекты этих классов взаимно видят элементы, описанные в их разделах private. |
private класса видны ТОЛЬКО ВНУТРИ ДАННОГО КЛАССА ИЛИ ДРУГА ДАННОГО КЛАССА. Внутри модуля могут быть описаны несколько классов, но они не будут видеть private секции друг друга никаким образом если они не друзья.
QUOTE |
Элементы, объявленные в классе в разделе public, видимы и доступны для объектов любых классов и для других модулей, в которых директивой #include включен заголовочный файл данного модуля. При этом из объектов того же класса, к ним можно обращаться непосредственно по имени, а из других объектов и процедур — только со ссылкой на объект данного класса. В рассмотренном примере это относится к переменной Ch1 и процедуре F2.
|
Здесь все верно. Но напутать с public было-бы предельным случаем, я бы сказал клиническим.
QUOTE |
В классах, помимо обсуждавшихся ранее, могут быть еще разделы protected — защищенные. Элементы, объявленные в классе в разделе protected, видимы и доступны для любых объектов внутри данного модуля, а также для объектов классов-наследников данного класса в других модулях. Объекты из других модулей, классы которых не являются наследниками данного класса, защищенных элементов не видят. |
protected из других классов, елсли они не потомки или друзья, также не видны.
Вообще модуль — чисто искуственно разделения для удобства манипулирования частями и понижения сложности одной отдельно взятой единицы трансляции, а также подчеркнуть логическую структуру программы.
|
|
Sl@Sh |
Отправлено: 13.09.2005, 17:11 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Да вы правы, не внимательно (со мной так всегда).
Тут точно мозайка какая-то (как Георгий писал). Возможно Архангельский имел ввиду модуль формы, в котором объявлен только класс формы и все функции и переменные этого модуля объявлены в классе формы.
|
|
Sergey Boyko |
Отправлено: 22.09.2005, 14:17 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 4
|
QUOTE | Вообще модуль — чисто искуственно разделения для удобства манипулирования частями и понижения сложности одной отдельно взятой единицы трансляции, а также подчеркнуть логическую структуру программы. |
Это не совсем так.
До последнего времени, это была еще и отдельно взятая единица линковки.
Кроме этого, не стоит забывать что до появления объектно-ориентированных языков, модули в большинстве случаев были единственным средством инкапсуляции данных (static-функции и данные ).
Так что я бы не стал так уверенно утверждать об "искуственности" модульной технологии.
Для наглядности советую сгенерировать MAP-файл, и внимательно изучить.
Отредактировано Sergey Boyko — 22/09/2005, 14:19
|
|
Asher |
Отправлено: 22.09.2005, 15:53 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
Не думал что мое высказывание в конце поста выглядит таким категоричным. Мне наверное надо почаще ИМХО писать, хотя я думал моя подпись решает эту проблему.
QUOTE | До последнего времени, это была еще и отдельно взятая единица линковки.
Кроме этого, не стоит забывать что до появления объектно-ориентированных языков, модули в большинстве случаев были единственным средством инкапсуляции данных (static-функции и данные ). |
С другой стороны, ИМХО, изменение смысла ключевого слова static в С++ по отношению к С и появление пространств имен ведет к тому, что реально разбиение на модули, в настоящее время, искусственно и в плане организации кода и в плане линковки .
В том смысле, что если-бы это было не так, то не требовалось бы от компиляторов механизма прекомпиляции заголовочных файлов.
P.S. to Sergey Boyko очень рад видеть Вас зарегистрированным на этом форуме.
Отредактировано Asher — 22/09/2005, 16:58
|
|
Gedeon |
Отправлено: 22.09.2005, 16:42 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (Asher @ 22/09/2005, 15:53) | P.S. to Sergey Boyko очень рад видеть Вас зарегистрированным на этом форуме. |
Присоединяюсь!
|
|