Oldring 0 26 апреля, 2007 Опубликовано 26 апреля, 2007 · Жалоба Bjarne Stroustrup - The C++ Programming Language 3rd Edition: Теперь сами решите кому верить - Бьерну Страустурпу (автору языка С++) или отдельным самоуверенным товарисчам. Страуструп, конечно, величина - не спорю. Только как часто случается, его творение давно живет независимо от автора. А практикующий программист должен читать не только учебники. http://www.google.com/search?q=nonvirtual+method Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 26 апреля, 2007 Опубликовано 26 апреля, 2007 · Жалоба Страуструп, конечно, величина - не спорю. Только как часто случается, его творение давно живет независимо от автора. В случае со Страуструпом это не так. Это его проект, был, есть и остается. И он возглавляет комитет по новшествам в языке, если склероз не врет. А практикующий программист должен читать не только учебники. http://www.google.com/search?q=nonvirtual+method Речь идет не "о вообще", а конкретно о С++. И в С++ своя устоявшаяся терминология. Функции-члены классов там называются функциями-членами классов, при этом виртуальные функции иногда называют методами. На самом деле все логично. Метод - это термин из ООП. Это функция в объектно-ориентированном дизайне, имеющаяя свойство быть переопределенной в потомке, что дает полиморфное поведение. В языках с динамической типизацией все функции такие в силу базовой модели языка. Но в С++ такими функциями являются только виртуальные, о чем Страуструп и говорит. То, что все функции-члены в С++ часто называют методами - распространенное заблуждение. Часто этим грешат переводчики, что еще больше вносит путаницы в умы читателей. P.S. Вижу, что на меня (вслед за Станиславом) тоже игнор поломался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 26 апреля, 2007 Опубликовано 26 апреля, 2007 · Жалоба В случае со Страуструпом это не так. Это его проект, был, есть и остается. И он возглавляет комитет по новшествам в языке, если склероз не врет. Речь идет не "о вообще", а конкретно о С++. И в С++ своя устоявшаяся терминология. Функции-члены классов там называются функциями-членами классов, при этом виртуальные функции иногда называют методами. На самом деле все логично. Метод - это термин из ООП. Это функция в объектно-ориентированном дизайне, имеющаяя свойство быть переопределенной в потомке, что дает полиморфное поведение. В языках с динамической типизацией все функции такие в силу базовой модели языка. Но в С++ такими функциями являются только виртуальные, о чем Страуструп и говорит. То, что все функции-члены в С++ часто называют методами - распространенное заблуждение. Часто этим грешат переводчики, что еще больше вносит путаницы в умы читателей. P.S. Вижу, что на меня (вслед за Станиславом) тоже игнор поломался. В стандарте плюсов нет вообще упоминания понятия "метод". Точно также, как не известен стандарт "ООП". То есть "метод" - это неформальное понятие. Страуструп в книжке утверждает, что методами часто называют виртуальные функции. Он, безусловно, прав. Но простой поиск в гугле и мой личный опыт показывают, что также широко говорят "статические методы класса", "виртуальные методы класса" и т. д. И по-русски, и по-английски. Дело не в переводчиках. Хотите узнать "как реально говорят" - лучше не книжки читайте, а поройтесь в поисковиках. Плюсы, конечно, не Смолток. Переопределять можно не все. Т. е. плюсы занимают промежуточную нишу между процедурными языками и чисто объектно-ориентированными, это компромисс, связанный с совместимостью и производительностью. И что с того, что некоторые методы объекта невозможно переопределить в потомке без специальных усилий? Это всего-лишь деталь реализации этого объекта. Вы в чисто процедурных языках вообще классы с функциями-членами встречали? P.S. У меня игнор выборочный. Иногда читаю сообщения, при малейшем сомнении не отвечаю. В споры вступаю по минимуму, когда вижу шанс человека посадить. Вроде вас со Станиславом и еще узким кругом мне обычно неприятных собеседников. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 26 апреля, 2007 Опубликовано 26 апреля, 2007 · Жалоба В стандарте плюсов нет вообще упоминания понятия "метод". Естественно, потому что термин "метод" к С++ никакого отношения не имеет. Точно также, как не известен стандарт "ООП". То есть "метод" - это неформальное понятие. Страуструп в книжке утверждает, что методами часто называют виртуальные функции. Он, безусловно, прав. Вот именно. Всякая терминология имеет смысл и пользу, если она вносит ясность, а не путаницу. У Страуструпа все четко и ясно - мухи от котлет отделены: обычные функции-члены от виртуальных (полиморфных), а у вас путаница, все в куче. Но простой поиск в гугле и мой личный опыт показывают, что также широко говорят "статические методы класса", "виртуальные методы класса" и т. д. И по-русски, и по-английски. Дело не в переводчиках. Простой поиск в гугле и ваш личный опыт лишь подтверждают широту заблуждений по этому вопросу. Не надо спорить с автором. Он автор, это его детище, он ввел терминологию, и будьте любезны в рамках ++ ее придерживаться. Во избежание путаницы. То же самое касается и всяких "модулей" (вместо "единиц компиляции"). Еще разок напомню, что "статические методы класса" в С++ - есть нонсенс. Хотите узнать "как реально говорят" - лучше не книжки читайте, а поройтесь в поисковиках. О! Вот это новость! Оказывается, книжки уже не авторитет. Очевидно, книжки классиков тоже. Ну-ну. Вместо четкого и ясного определения из первоисточников предлагается копаться в туче ссылок из поисковика, 90% которых в лучшем случае просто частные мнения каких-то неизвестных человеков. И относящихся по большей части не столько к С++, сколько к ООП вообще и другим языкам в частности (Java, C# и т.д.). Ценный совет, ничего не скажешь. Следование ему видно невооруженным взглядом. Плюсы, конечно, не Смолток. Переопределять можно не все. Т. е. плюсы занимают промежуточную нишу между процедурными языками и чисто объектно-ориентированными, это компромисс, связанный с совместимостью и производительностью. И что с того, что некоторые методы объекта невозможно переопределить в потомке без специальных усилий? Это всего-лишь деталь реализации этого объекта. Ой, спасибо, просветили меня темного. :glare: Авторитетное мнение авторитетного автора, что тут скажешь. Особенно, учитывая "статические методы" в С++. Вы в чисто процедурных языках вообще классы с функциями-членами встречали? Это к чему вообще? Перевести тему в другую плоскость? Знакомо. Не получится. P.S. У меня игнор выборочный. О! Это как??? Технически? Насколько знаю - игнор, он и есть игнор, мессаги заигнорированного участника физически не видны. Или вы экстрасенс? Научите такой игнор слабать? Хотя я игнором в принципе не пользуюсь, т.к. считаю это просто прятанием головы в песок, т.е. позицией трусливой и глупой. Но техническая реализация интересна. Иногда читаю сообщения, при малейшем сомнении не отвечаю. В споры вступаю по минимуму, когда вижу шанс человека посадить. Вроде вас со Станиславом и еще узким кругом мне обычно неприятных собеседников. Угу, только в этом топике в лужу-то сели как раз вы. Продемонстрировав незнание элементарных вещей, той же терминологии ЯП С++. И в топике Станислава (про конденсатор) мы тоже все видели, кто в луже. Ждем, когда Станислав продлжит ваше в ней купание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 26 апреля, 2007 Опубликовано 26 апреля, 2007 · Жалоба Естественно, потому что термин "метод" к С++ никакого отношения не имеет. Вот именно. Всякая терминология имеет смысл и пользу, если она вносит ясность, а не путаницу. У Страуструпа все четко и ясно - мухи от котлет отделены: обычные функции-члены от виртуальных (полиморфных), а у вас путаница, все в куче. Простой поиск в гугле и ваш личный опыт лишь подтверждают широту заблуждений по этому вопросу. Не надо спорить с автором. Он автор, это его детище, он ввел терминологию, и будьте любезны в рамках ++ ее придерживаться. Во избежание путаницы. То же самое касается и всяких "модулей" (вместо "единиц компиляции"). Еще разок напомню, что "статические методы класса" в С++ - есть нонсенс. О! Вот это новость! Оказывается, книжки уже не авторитет. Очевидно, книжки классиков тоже. Ну-ну. Вместо четкого и ясного определения из первоисточников предлагается копаться в туче ссылок из поисковика, 90% которых в лучшем случае просто частные мнения каких-то неизвестных человеков. И относящихся по большей части не столько к С++, сколько к ООП вообще и другим языкам в частности (Java, C# и т.д.). Ценный совет, ничего не скажешь. Следование ему видно невооруженным взглядом. Ой, спасибо, просветили меня темного. :glare: Авторитетное мнение авторитетного автора, что тут скажешь. Особенно, учитывая "статические методы" в С++. Это к чему вообще? Перевести тему в другую плоскость? Знакомо. Не получится. О! Это как??? Технически? Насколько знаю - игнор, он и есть игнор, мессаги заигнорированного участника физически не видны. Или вы экстрасенс? Научите такой игнор слабать? Хотя я игнором в принципе не пользуюсь, т.к. считаю это просто прятанием головы в песок, т.е. позицией трусливой и глупой. Но техническая реализация интересна. Угу, только в этом топике в лужу-то сели как раз вы. Продемонстрировав незнание элементарных вещей, той же терминологии ЯП С++. И в топике Станислава (про конденсатор) мы тоже все видели, кто в луже. Ждем, когда Станислав продлжит ваше в ней купание. По поводу игнора - есть кнопка, просмотреть сообщение. Иногда сморю, когда долго не смотрел, или когда ввязался в обсуждение, как сейчас. Большей частью нет. Обычно оказывается, что ничего интересного все равно не было. Да, именно, "как говорят" в книгах не описывают. Думаете, как толковые словари составляются. Если теория опровергает практику - тем хуже для практики Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
legotron 0 27 апреля, 2007 Опубликовано 27 апреля, 2007 · Жалоба Прошу прощения, что вклиниваюсь в столь жаркую дискуссию! :) Каков смысл статических функций класса? Зачем их следует использовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 27 апреля, 2007 Опубликовано 27 апреля, 2007 · Жалоба Каков смысл статических функций класса? Зачем их следует использовать? Главный смысл статических функций-членов классов - разгрузить глобальное пространство имен. Т.е., например, требуется какая-то функция, которая должна выполнять работу, не связанную непосредственно с объектами класса, но имеющую отношение к классу и его объектам (в целом). Например, надо проинициализировать что-то, но не в конструкторе класса, а уже внутри main. Например, проициализировать аппаратные регистры какого-то устройства (в ембеддед применениях). Обработчик прерываний тоже характерный пример - нестатическая функция-член класса не может быть обработчиком прерывания. Чтобы не загромождать глобальное пространство имен, такую функцию удобно объявить статической функцией-членом класса, и она будет существовать в scope этого класса. Второе отличие статической функции-члена класса от обычной функции (не члена класса) - статическая функция-член имеет доступ к не-public членам своего класса. Но это свойство для простой функции можно добыть, объявив ее другом (friend) класса. Статическая функция-член живет своей жизнью и ее можно вызывать даже если не создано ни одного объекта класса. Т.е. точно как обычная функция. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 27 апреля, 2007 Опубликовано 27 апреля, 2007 · Жалоба Ну и еще добавлю, что в нестатическую функцию-член неявно первым параметром передается указатель на экземпляр класса, а в статическую он не передается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться