Перейти к содержанию
    

Глупые вопросы по типам данных

Bjarne Stroustrup - The C++ Programming Language 3rd Edition:

Теперь сами решите кому верить - Бьерну Страустурпу (автору языка С++) или отдельным самоуверенным товарисчам.

 

Страуструп, конечно, величина - не спорю. Только как часто случается, его творение давно живет независимо от автора. А практикующий программист должен читать не только учебники. :biggrin:

 

http://www.google.com/search?q=nonvirtual+method

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Страуструп, конечно, величина - не спорю. Только как часто случается, его творение давно живет независимо от автора.

В случае со Страуструпом это не так. Это его проект, был, есть и остается. И он возглавляет комитет по новшествам в языке, если склероз не врет.

 

А практикующий программист должен читать не только учебники. :biggrin:

 

http://www.google.com/search?q=nonvirtual+method

Речь идет не "о вообще", а конкретно о С++. И в С++ своя устоявшаяся терминология. Функции-члены классов там называются функциями-членами классов, при этом виртуальные функции иногда называют методами.

 

На самом деле все логично. Метод - это термин из ООП. Это функция в объектно-ориентированном дизайне, имеющаяя свойство быть переопределенной в потомке, что дает полиморфное поведение. В языках с динамической типизацией все функции такие в силу базовой модели языка. Но в С++ такими функциями являются только виртуальные, о чем Страуструп и говорит.

 

То, что все функции-члены в С++ часто называют методами - распространенное заблуждение. Часто этим грешат переводчики, что еще больше вносит путаницы в умы читателей.

 

P.S. Вижу, что на меня (вслед за Станиславом) тоже игнор поломался. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В случае со Страуструпом это не так. Это его проект, был, есть и остается. И он возглавляет комитет по новшествам в языке, если склероз не врет.

Речь идет не "о вообще", а конкретно о С++. И в С++ своя устоявшаяся терминология. Функции-члены классов там называются функциями-членами классов, при этом виртуальные функции иногда называют методами.

 

На самом деле все логично. Метод - это термин из ООП. Это функция в объектно-ориентированном дизайне, имеющаяя свойство быть переопределенной в потомке, что дает полиморфное поведение. В языках с динамической типизацией все функции такие в силу базовой модели языка. Но в С++ такими функциями являются только виртуальные, о чем Страуструп и говорит.

 

То, что все функции-члены в С++ часто называют методами - распространенное заблуждение. Часто этим грешат переводчики, что еще больше вносит путаницы в умы читателей.

 

P.S. Вижу, что на меня (вслед за Станиславом) тоже игнор поломался. :biggrin:

 

В стандарте плюсов нет вообще упоминания понятия "метод". Точно также, как не известен стандарт "ООП". То есть "метод" - это неформальное понятие. Страуструп в книжке утверждает, что методами часто называют виртуальные функции. Он, безусловно, прав. Но простой поиск в гугле и мой личный опыт показывают, что также широко говорят "статические методы класса", "виртуальные методы класса" и т. д. И по-русски, и по-английски. Дело не в переводчиках. Хотите узнать "как реально говорят" - лучше не книжки читайте, а поройтесь в поисковиках.

 

Плюсы, конечно, не Смолток. Переопределять можно не все. Т. е. плюсы занимают промежуточную нишу между процедурными языками и чисто объектно-ориентированными, это компромисс, связанный с совместимостью и производительностью. И что с того, что некоторые методы объекта невозможно переопределить в потомке без специальных усилий? Это всего-лишь деталь реализации этого объекта. Вы в чисто процедурных языках вообще классы с функциями-членами встречали?

 

P.S. У меня игнор выборочный. Иногда читаю сообщения, при малейшем сомнении не отвечаю. В споры вступаю по минимуму, когда вижу шанс человека посадить. :biggrin: Вроде вас со Станиславом и еще узким кругом мне обычно неприятных собеседников.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В стандарте плюсов нет вообще упоминания понятия "метод".

Естественно, потому что термин "метод" к С++ никакого отношения не имеет.

 

Точно также, как не известен стандарт "ООП". То есть "метод" - это неформальное понятие. Страуструп в книжке утверждает, что методами часто называют виртуальные функции. Он, безусловно, прав.

Вот именно. Всякая терминология имеет смысл и пользу, если она вносит ясность, а не путаницу. У Страуструпа все четко и ясно - мухи от котлет отделены: обычные функции-члены от виртуальных (полиморфных), а у вас путаница, все в куче.

 

Но простой поиск в гугле и мой личный опыт показывают, что также широко говорят "статические методы класса", "виртуальные методы класса" и т. д. И по-русски, и по-английски. Дело не в переводчиках.

Простой поиск в гугле и ваш личный опыт лишь подтверждают широту заблуждений по этому вопросу. Не надо спорить с автором. Он автор, это его детище, он ввел терминологию, и будьте любезны в рамках ++ ее придерживаться. Во избежание путаницы. То же самое касается и всяких "модулей" (вместо "единиц компиляции").

 

Еще разок напомню, что "статические методы класса" в С++ - есть нонсенс.

 

Хотите узнать "как реально говорят" - лучше не книжки читайте, а поройтесь в поисковиках.

О! Вот это новость! Оказывается, книжки уже не авторитет. Очевидно, книжки классиков тоже. Ну-ну. Вместо четкого и ясного определения из первоисточников предлагается копаться в туче ссылок из поисковика, 90% которых в лучшем случае просто частные мнения каких-то неизвестных человеков. И относящихся по большей части не столько к С++, сколько к ООП вообще и другим языкам в частности (Java, C# и т.д.). Ценный совет, ничего не скажешь. Следование ему видно невооруженным взглядом.

 

Плюсы, конечно, не Смолток. Переопределять можно не все. Т. е. плюсы занимают промежуточную нишу между процедурными языками и чисто объектно-ориентированными, это компромисс, связанный с совместимостью и производительностью. И что с того, что некоторые методы объекта невозможно переопределить в потомке без специальных усилий? Это всего-лишь деталь реализации этого объекта.

Ой, спасибо, просветили меня темного. :glare: Авторитетное мнение авторитетного автора, что тут скажешь. Особенно, учитывая "статические методы" в С++.

 

Вы в чисто процедурных языках вообще классы с функциями-членами встречали?

Это к чему вообще? Перевести тему в другую плоскость? Знакомо. Не получится.

 

P.S. У меня игнор выборочный.

О! Это как??? Технически? Насколько знаю - игнор, он и есть игнор, мессаги заигнорированного участника физически не видны. Или вы экстрасенс? Научите такой игнор слабать? Хотя я игнором в принципе не пользуюсь, т.к. считаю это просто прятанием головы в песок, т.е. позицией трусливой и глупой. Но техническая реализация интересна.

 

Иногда читаю сообщения, при малейшем сомнении не отвечаю. В споры вступаю по минимуму, когда вижу шанс человека посадить. :biggrin: Вроде вас со Станиславом и еще узким кругом мне обычно неприятных собеседников.

Угу, только в этом топике в лужу-то сели как раз вы. Продемонстрировав незнание элементарных вещей, той же терминологии ЯП С++. И в топике Станислава (про конденсатор) мы тоже все видели, кто в луже. Ждем, когда Станислав продлжит ваше в ней купание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Естественно, потому что термин "метод" к С++ никакого отношения не имеет.

Вот именно. Всякая терминология имеет смысл и пользу, если она вносит ясность, а не путаницу. У Страуструпа все четко и ясно - мухи от котлет отделены: обычные функции-члены от виртуальных (полиморфных), а у вас путаница, все в куче.

Простой поиск в гугле и ваш личный опыт лишь подтверждают широту заблуждений по этому вопросу. Не надо спорить с автором. Он автор, это его детище, он ввел терминологию, и будьте любезны в рамках ++ ее придерживаться. Во избежание путаницы. То же самое касается и всяких "модулей" (вместо "единиц компиляции").

 

Еще разок напомню, что "статические методы класса" в С++ - есть нонсенс.

О! Вот это новость! Оказывается, книжки уже не авторитет. Очевидно, книжки классиков тоже. Ну-ну. Вместо четкого и ясного определения из первоисточников предлагается копаться в туче ссылок из поисковика, 90% которых в лучшем случае просто частные мнения каких-то неизвестных человеков. И относящихся по большей части не столько к С++, сколько к ООП вообще и другим языкам в частности (Java, C# и т.д.). Ценный совет, ничего не скажешь. Следование ему видно невооруженным взглядом.

Ой, спасибо, просветили меня темного. :glare: Авторитетное мнение авторитетного автора, что тут скажешь. Особенно, учитывая "статические методы" в С++.

Это к чему вообще? Перевести тему в другую плоскость? Знакомо. Не получится.

О! Это как??? Технически? Насколько знаю - игнор, он и есть игнор, мессаги заигнорированного участника физически не видны. Или вы экстрасенс? Научите такой игнор слабать? Хотя я игнором в принципе не пользуюсь, т.к. считаю это просто прятанием головы в песок, т.е. позицией трусливой и глупой. Но техническая реализация интересна.

Угу, только в этом топике в лужу-то сели как раз вы. Продемонстрировав незнание элементарных вещей, той же терминологии ЯП С++. И в топике Станислава (про конденсатор) мы тоже все видели, кто в луже. Ждем, когда Станислав продлжит ваше в ней купание.

 

 

По поводу игнора - есть кнопка, просмотреть сообщение. Иногда сморю, когда долго не смотрел, или когда ввязался в обсуждение, как сейчас. Большей частью нет. Обычно оказывается, что ничего интересного все равно не было.

 

Да, именно, "как говорят" в книгах не описывают. Думаете, как толковые словари составляются.

 

Если теория опровергает практику - тем хуже для практики :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения, что вклиниваюсь в столь жаркую дискуссию! :)

 

Каков смысл статических функций класса? Зачем их следует использовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каков смысл статических функций класса? Зачем их следует использовать?

Главный смысл статических функций-членов классов - разгрузить глобальное пространство имен. Т.е., например, требуется какая-то функция, которая должна выполнять работу, не связанную непосредственно с объектами класса, но имеющую отношение к классу и его объектам (в целом). Например, надо проинициализировать что-то, но не в конструкторе класса, а уже внутри main. Например, проициализировать аппаратные регистры какого-то устройства (в ембеддед применениях). Обработчик прерываний тоже характерный пример - нестатическая функция-член класса не может быть обработчиком прерывания.

 

Чтобы не загромождать глобальное пространство имен, такую функцию удобно объявить статической функцией-членом класса, и она будет существовать в scope этого класса.

 

Второе отличие статической функции-члена класса от обычной функции (не члена класса) - статическая функция-член имеет доступ к не-public членам своего класса. Но это свойство для простой функции можно добыть, объявив ее другом (friend) класса.

 

Статическая функция-член живет своей жизнью и ее можно вызывать даже если не создано ни одного объекта класса. Т.е. точно как обычная функция.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и еще добавлю, что в нестатическую функцию-член неявно первым параметром передается указатель на экземпляр класса, а в статическую он не передается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...