Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 102, средняя оценка - 4.94
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Что такое инстанцирование? - C++

07.04.2011, 08:21. Просмотров 12949. Ответов 32
Метки нет (Все метки)

C++
1
2
3
4
5
class A
{
 ...
};
A a; // Это уже инстанцирование A?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2011, 08:21     Что такое инстанцирование?
Посмотрите здесь:

Можно ли инстанцирование класса прописать в самом классе? C++
Инстанцирование шаблона C++
C++ Инстанцирование шаблона
C++ Инстанцирование шаблонного класса
Инстанцирование шаблона для различных типов C++
Что такое перегрузка оператора? Что у меня в коде за ошибка? C++
C++ Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
07.04.2011, 08:24     Что такое инстанцирование? #2
taras atavin, создание экземпляра класса.
Цитата Сообщение от taras atavin Посмотреть сообщение
Это уже инстанцирование A?
Да.
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 07:27     Что такое инстанцирование? #3
Вообще-то в C++ термин «инстанцирование» применяется к шаблонам.
Шаблон определяет семейство классов или функций. Результат инстанцирования этого шаблона с указанием его аргументов – класс или функция.
Например, вот это инстанцирование:
C++
1
typedef std::complex<int>  T_int_complex;
И вот это тоже:
C++
1
std::complex<char> char_c;
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 08:22     Что такое инстанцирование? #4
Цитата Сообщение от Mr.X Посмотреть сообщение
Вообще-то в C++ термин «инстанцирование» применяется к шаблонам.
Не только. Инстанцирование - создание экземпляра класса. В контексте шаблона речь идёт также и о генерации кода для поддержки соответствующего типа. Для не шаблонных классов, просто создание экземпляра.

Добавлено через 19 минут
Цитата Сообщение от Mr.X Посмотреть сообщение
Например, вот это инстанцирование:
Очень сомневаюсь. Но проверить не получается.)))
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 08:46     Что такое инстанцирование? #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Для не шаблонных классов, просто создание экземпляра.
Ну, не знаю где вы это вычитали, но в русском переводе Страуструпа термин «инстанцирование» применяется только к шаблонам.
Цитата Сообщение от Deviaphan Посмотреть сообщение
Цитата Сообщение от Mr.X Например, вот это инстанцирование:

Очень сомневаюсь. Но проверить не получается.)))
И что же тут сомнительного?
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17192 / 5446 / 337
Регистрация: 30.03.2009
Сообщений: 14,794
Записей в блоге: 26
08.04.2011, 09:05     Что такое инстанцирование? #6
Цитата Сообщение от Deviaphan Посмотреть сообщение
Инстанцирование - создание экземпляра класса
Нет, не так. Если ты НЕ создаёшь экземпляр класса, то методы класса всё равно попадут в код (если они не inline). А вот если ты не создашь экземпляр чего-либо от шаблона, то код для этого шаблона не сгенерируется вообще. Если ты используешь лишь некоторые методы шаблонного класса, то неиспользуемые методы в код так же не попадут. Инстанциация по своей сути эквивалентна подстановке макроса. Сам макрос - это не есть материальный код, а всего лишь текстовое описание, и только использование этого макроса превращает описание в исходник (который уже превратится в код)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 10:00     Что такое инстанцирование? #7
Цитата Сообщение от Mr.X Посмотреть сообщение
И что же тут сомнительного?
Как уже написал Evg, код будет сгенерирован только для тех методов, которые вызываются. В данном случае объявлен псевдоним типа, но никаких методов не вызывается и экземпляров не создаётся. Т.е. никакого кода сгенерировано не будет. И непонятно, что именно компилятор сделает? В общем я не могу спорить, т.к. не могу написать тестовый пример.(

Добавлено через 25 минут
Цитата Сообщение от Evg Посмотреть сообщение
Нет, не так.
Я к тому, что без создания объекта инстанцирования вообще нет.) И, что термин инстанцирование применим не только к шаблонам.
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 10:15     Что такое инстанцирование? #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Т.е. никакого кода сгенерировано не будет. И непонятно, что именно компилятор сделает?
Ну, что сделает компилятор – это должно волновать разработчиков этого компилятора. А по стандарту инстанцирование шаблона – это применение к его имени списка аргументов в угловых скобках.
При определении типа и генерируется определение этого типа (в данном случае класса).
У Страуструпа написано: «из шаблона-класса и набора аргументов шаблона компилятору нужно сгенерировать и определение класса и определения его используемых функций-членов».
Так как использование других членов (не функций) специально не отслеживается, а они могут быть использованы в любой момент, то определение класса генерируется в любом случае.

Добавлено через 11 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я к тому, что без создания объекта инстанцирования вообще нет.)
А вот тут у вас пока недопонимание. Инстанцирование - это создание типа или функции из шаблона. При чем тут объекты?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 10:20     Что такое инстанцирование? #9
Цитата Сообщение от Mr.X Посмотреть сообщение
При чем тут объекты
При том, что инстанцирование - создание экземпляра, а не типа.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
08.04.2011, 10:24     Что такое инстанцирование? #10
Deviaphan, Создание экземпляра класса, но не объекта.
Инстанцирование (англ. instantiation) — создание экземпляра класса. В отличие от слова «создание», применяется не к объекту, а к классу. То есть, говорят: «(в виртуальной среде) создать экземпляр класса или инстанцировать класс». Порождающие шаблоны используют полиморфное инстанцирование.
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 10:32     Что такое инстанцирование? #11
Цитата Сообщение от Deviaphan Посмотреть сообщение
При том, что инстанцирование - создание экземпляра, а не типа.
Ну вот этот момент вы пока и не просекаете. Именно типа!
Прежде чем рассуждать, не вредно и в учебник заглянуть, а в нем сказано (у Страуструпа): "процесс генерации объявления класса по шаблону класса и аргументу шаблона называется инстанцированием шаблона".
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 10:41     Что такое инстанцирование? #12
В сообщении №4 я это и написал.
А теперь погугли слово экземпляр ещё.)
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17192 / 5446 / 337
Регистрация: 30.03.2009
Сообщений: 14,794
Записей в блоге: 26
08.04.2011, 10:56     Что такое инстанцирование? #13
Цитата Сообщение от Deviaphan Посмотреть сообщение
При том, что инстанцирование - создание экземпляра, а не типа.
На самом деле как бы создание типа. Ты можешь вызывать метод класса или использовать поле класса без создания экземпляра класса. И инстанциация произойдёт. По стандарту скорее всего должно быть действительно так, что при любом упоминании шаблона с параметром происходит инстанциация всего, что растёт от этого шаблона, а то, что неиспользуемые методы не будут генериться, возможно это оптимизация. С другой стороны я не знаю, как это с формальной точки зрения соотносится с тем, что класс может быть описан в отдельном шаблоне, а метод - в отдельном. Но в итоге можно считать, что происходит именно то, о чём я писал выше: генерится код только для того, что реально используется
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 11:27     Что такое инстанцирование? #14
Ты можешь вызывать метод класса или использовать поле класса без создания экземпляра класса
Про метод согласен, но как обратиться к полю, без создания экземпляра (объекта). Т.е. пока не создан объект, нету и полей его. Допустим, можно узнать смещение поля, относительно базового адреса объекта, только вот этого адреса нету, пока объект не создан.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
08.04.2011, 12:00     Что такое инстанцирование? #15
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну вот этот момент вы пока и не просекаете.
Вы поймите что есть инстанцирование шаблона в C++, а есть создание экземпляра класса, что также называется инстанцированием в практически всех ОО языках. C++ довольно специфичен в терминологии и расходится с более "чистыми" ОО языками.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17192 / 5446 / 337
Регистрация: 30.03.2009
Сообщений: 14,794
Записей в блоге: 26
08.04.2011, 12:12     Что такое инстанцирование? #16
Цитата Сообщение от Deviaphan Посмотреть сообщение
Про метод согласен, но как обратиться к полю, без создания экземпляра (объекта). Т.е. пока не создан объект, нету и полей его. Допустим, можно узнать смещение поля, относительно базового адреса объекта, только вот этого адреса нету, пока объект не создан.
Например, у тебя есть указатель на шаблонный объект. Ты этот объект не создавал (он создан, например, где-то в недрах чужого кода), но инстанциация методов при компиляции твоего кода всё равно происходит. Поле и метод могут быть статическим, а дляработы с ними вообще экземпляр класса не нужен. Но инстанциация тоже делается
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.04.2011, 12:18  [ТС]     Что такое инстанцирование? #17
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, не знаю где вы это вычитали
Не знаю, как другие, я это вычитал в викепедии, тема создана из-за сомнений в правильности понимания.
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 12:18     Что такое инстанцирование? #18
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вы поймите что есть инстанцирование шаблона в C++, а есть создание экземпляра класса, что также называется инстанцированием в практически всех ОО языках. C++ довольно специфичен в терминологии и расходится с более "чистыми" ОО языками.
Ну, если сами пользователи языка не будут следить за чистотой терминологии, то больше этого делать будет некому.
И тем более не стоит смешивать терминологию нескольких языков.
«Создание экземпляра класса» звучит двусмысленно. В C++ это всегда называлось созданием объекта.
Я уж молчу про «методы» и «сообщения», которых в C++ нет, так здесь на форуме уже шаблоны некоторые называют «родовыми классами». Так мы и до субклассов и суперклассов докатимся.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.04.2011, 12:20  [ТС]     Что такое инстанцирование? #19
Цитата Сообщение от Deviaphan Посмотреть сообщение
е вызывается и экземпляров не создаётся. Т.е. никакого кода сгенерировано не будет
Экземпляры - это объекты, а код бывает только у членов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2011, 12:23     Что такое инстанцирование?
Еще ссылки по теме:

C++ Инстанцирование шаблона во время выполнения
C++ Что такое хэндлер файла? Что такое файловый указатель?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? C++
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них C++
Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 12:23     Что такое инстанцирование? #20
Цитата Сообщение от taras atavin Посмотреть сообщение
Цитата Сообщение от Mr.X
Ну, не знаю где вы это вычитали

Я это вычитал в викепедии, тема создана из-за сомнений в правильности понимания.
Ну вот, а здесь на форуме какие-то наивные люди все время просят порекомендовать им учебники. Нет чтобы Википедию почитать.
Yandex
Объявления
08.04.2011, 12:23     Что такое инстанцирование?
Ответ Создать тему
Опции темы

Текущее время: 03:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru