![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Noname2512, я за тебя могу поднять или опустить репутацию. По твоей просьбе. Плюсовать ?
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Сыроежка |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
Помимо каскадирования, как правильно указал JЕT, этот прием с использованием функции-члена класса можно использовать для построение виртуального оператора вывода. Например,
|
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
обычно стараются разгрузить виртуальный метод, чтоб он делал минимум действий, для обеспечения большей надежностти и удобства при переопределении.. поэтому код из предыдущего поста я бы написал так :
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
mes, чего-то особо не вижу разницы, кроме того, что не получится сделать то, что предложил JЕT - каскадирование
Добавлено через 4 минуты и 13 секунд надеюсь это LGPL ? можно взять на вооружение ? ![]() Это сообщение отредактировал(а) borisbn - 22.7.2011, 20:25 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Сыроежка |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
Я не вижу какой-либо существенной "разгрузки" виртуальной функции, но я вижу существенные недостатки в интерфейсе. Возвращать void - это крайней случай, когда действительнот ничего полезного возвратить нельзя, и нужно стараться избегать его. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
получится с помощью оператора <<, к тому же это неявно пощряет использование вывода через этот оператор, а не вызовом функции.. еще одним подобным пощрением будет помещение функции в защищенную область..
функция в нашем случае выполняет свою роль в паттерне виртуальный метод и предусмотрена только для возможности изменения поведения, но не для использования в качестве интерфейса.. это наверно в стандарте написано ![]() Добавлено через 1 минуту и 25 секунд нет, это не LGPL, а абсолютно free ![]() |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Есть такая вещь как сериализация. От приведенных здесь примеров с выводом в потоки, выгодно отличается тем, что нужно писать только один код. И он будет работать как на вывод, так и на ввод. Тем самым автоматически будет поддерживаться соответствие ввода-вывода. Сериализация есть во многих библиотеках. |
|||
|
||||
Сыроежка |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
Я не вижу никакого смысла в вашей этой фразе. Я лишь вижу, что вы ограничиваете интерфейс, ничем это не обосновывая. Ваше заявление про "разгрузку виртуальных функций" никакого смысла не имеет. Виртуальные функции - это такие же функции, как и другие функции, только связывание их происходит не статически, а динамически. Что касается вашей иронии насчет стандарта, то она совершенно неуместна, и говорит лишь о том, что у вас нет никаких таргументов. Представьте себе стандартную функцию strcat, которая вместо указателя на строку, возвращала бы void.. Это было бы лишь сужение возможностей пользователя. Имп void никакой информации не несет. Поэтому умышленно ограничивать пользователя функции в инофрмации - это по крайней мере плохой стиль программирования, так как вы ограничиваете возможности пользователя, который все равно вынужден будет искать обходные пути. То есть если вы что-то утверждаете, то следовало бы это обсоновывать, а не писать пустые высокопарные фразы. Я вам приведу простой пример.
Ну и в чем вы усмотрели разницу между двумя этими вызовами функции? Почему если используется указатель, то вызываемая функция puts должна быть "разгружена" по сравнению с ее же вызовом, но не через укакзатель?! На мой взгляд вы что-то там заявили, но никакой ответсвенности за свое заявленпие не несете! |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вот именно не видете, потому что вырываете слова из контекста.. Речь идет не о разгрузке виртуальных функций, а разгрузке функций паттерна виртуальный метод..
если б Вы не так покланялись бы стандарту, то знали бы, что для успешного программированния одним стандартом жить не будешь.. насчет аргументов, если перечитаете предыдущие посты не выбрасывая незнакомых слов, то вполне сможете понять о ченм речь, и какая подоплека лежит под этим.. Для специалиста к коим Вы себя относите информации для аргументации в предыдущих постах более, чем достаточно ![]() Перечитайте еще раз, что я писал, а то пока Вы вешаете ярлыки мне в том, о чем я не говорил ![]() Добавлено через 4 минуты и 19 секунд
разгрузка - это не возвращение void, a избавление от лишних деталей, реализация которых не имеет прямого отношения к фунционалу.. |
||||
|
|||||
Сыроежка |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 24.6.2011 Репутация: 1 Всего: 1 |
Это кто вам сказал, что это не имеет отношение к функционалу?! Функция-член класса out является открытой функцией, то есть интерфейсом. А знаете, откуда у вас такая ошибочная самоуверенность в "прямом отношении к функционалу"? Да потому что вы многое еще не понимпете и потому не видете, что функцию out в отличии от оператора << очень удобно ичпользовать в качяестве функции обратного вызова для различных алгоритмов. Но так как ваши знания С++ очень ограничены, и заключаются лищь в том, что вы без осмысливания цитируете различные прочитанные книжки, то такая мысль об использовании функции out в качестве функции обратного вызова для алгоритмов естественно вам в голову не пришла. Если еще не понимаете, о чем идет речь, то попробуйте оператор << задать в качестве функции обратного вызова, и вы поймете, с какими сложностями вы столкнетесь! Это сообщение отредактировал(а) Сыроежка - 24.7.2011, 02:54 |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
прошу пример в студию (любого осмысленного или неосмысленного) цитирования книжки за все время пребывания на этом форуме ![]() все высказанное мной здесь это мой личный опыт ![]() а то, что знания С++, да и программирования в целом у меня огранничены, я не спорю, куда мне до Ваших неогранниченых знаний ![]() судя по вашему посту, Вы опять за меня считаете, что я думаю, что функция out не имеет отношения к функционалу ![]() позвольте Вас поправить.. возвращение переданного потока не является прямым функционалом виртуальной функции out.. и это никак не связано с наличием/отсутствием функции для передачи в колбяк.. виртуальная функция прежде всего отличается от обычной не тем, что у нее косвенной вызов (это лишь технические издержки) , а тем что ее может перегрузить пользователь-наследник.. именно это является причиной для разгрузки и выноса лишнего функционала наружу.. поясняющий код :
нда..отсутствие возвращаемоего параметра мешает Вам передать Вашу функцию как колбяк ? ![]()
чтоб лишний раз не напрягаться, приведите пример который нуждается в таком колбяке.. ![]() Это сообщение отредактировал(а) mes - 24.7.2011, 15:31 |
||||||
|
|||||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
xvr, дело не в знаниях. С таким человеком очень трудно разговаривать. mes, +1 за выдержку и хладнокровие. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |