4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
1

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

07.04.2011, 08:21. Показов 38287. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
class A
{
 ...
};
A a; // Это уже инстанцирование A?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2011, 08:21
Ответы с готовыми решениями:

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель?
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из...

33
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
07.04.2011, 08:24 2
taras atavin, создание экземпляра класса.
Цитата Сообщение от taras atavin Посмотреть сообщение
Это уже инстанцирование A?
Да.
0
Эксперт С++
3224 / 1751 / 436
Регистрация: 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;
2
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 08:22 4
Цитата Сообщение от Mr.X Посмотреть сообщение
Вообще-то в C++ термин «инстанцирование» применяется к шаблонам.
Не только. Инстанцирование - создание экземпляра класса. В контексте шаблона речь идёт также и о генерации кода для поддержки соответствующего типа. Для не шаблонных классов, просто создание экземпляра.

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

Очень сомневаюсь. Но проверить не получается.)))
И что же тут сомнительного?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
08.04.2011, 09:05 6
Цитата Сообщение от Deviaphan Посмотреть сообщение
Инстанцирование - создание экземпляра класса
Нет, не так. Если ты НЕ создаёшь экземпляр класса, то методы класса всё равно попадут в код (если они не inline). А вот если ты не создашь экземпляр чего-либо от шаблона, то код для этого шаблона не сгенерируется вообще. Если ты используешь лишь некоторые методы шаблонного класса, то неиспользуемые методы в код так же не попадут. Инстанциация по своей сути эквивалентна подстановке макроса. Сам макрос - это не есть материальный код, а всего лишь текстовое описание, и только использование этого макроса превращает описание в исходник (который уже превратится в код)
2
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 10:00 7
Цитата Сообщение от Mr.X Посмотреть сообщение
И что же тут сомнительного?
Как уже написал Evg, код будет сгенерирован только для тех методов, которые вызываются. В данном случае объявлен псевдоним типа, но никаких методов не вызывается и экземпляров не создаётся. Т.е. никакого кода сгенерировано не будет. И непонятно, что именно компилятор сделает? В общем я не могу спорить, т.к. не могу написать тестовый пример.(

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

Добавлено через 11 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я к тому, что без создания объекта инстанцирования вообще нет.)
А вот тут у вас пока недопонимание. Инстанцирование - это создание типа или функции из шаблона. При чем тут объекты?
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 10:20 9
Цитата Сообщение от Mr.X Посмотреть сообщение
При чем тут объекты
При том, что инстанцирование - создание экземпляра, а не типа.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.04.2011, 10:24 10
Deviaphan, Создание экземпляра класса, но не объекта.
Инстанцирование (англ. instantiation) — создание экземпляра класса. В отличие от слова «создание», применяется не к объекту, а к классу. То есть, говорят: «(в виртуальной среде) создать экземпляр класса или инстанцировать класс». Порождающие шаблоны используют полиморфное инстанцирование.
0
Эксперт С++
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 10:32 11
Цитата Сообщение от Deviaphan Посмотреть сообщение
При том, что инстанцирование - создание экземпляра, а не типа.
Ну вот этот момент вы пока и не просекаете. Именно типа!
Прежде чем рассуждать, не вредно и в учебник заглянуть, а в нем сказано (у Страуструпа): "процесс генерации объявления класса по шаблону класса и аргументу шаблона называется инстанцированием шаблона".
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 10:41 12
В сообщении №4 я это и написал.
А теперь погугли слово экземпляр ещё.)
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
08.04.2011, 10:56 13
Цитата Сообщение от Deviaphan Посмотреть сообщение
При том, что инстанцирование - создание экземпляра, а не типа.
На самом деле как бы создание типа. Ты можешь вызывать метод класса или использовать поле класса без создания экземпляра класса. И инстанциация произойдёт. По стандарту скорее всего должно быть действительно так, что при любом упоминании шаблона с параметром происходит инстанциация всего, что растёт от этого шаблона, а то, что неиспользуемые методы не будут генериться, возможно это оптимизация. С другой стороны я не знаю, как это с формальной точки зрения соотносится с тем, что класс может быть описан в отдельном шаблоне, а метод - в отдельном. Но в итоге можно считать, что происходит именно то, о чём я писал выше: генерится код только для того, что реально используется
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 11:27 14
Ты можешь вызывать метод класса или использовать поле класса без создания экземпляра класса
Про метод согласен, но как обратиться к полю, без создания экземпляра (объекта). Т.е. пока не создан объект, нету и полей его. Допустим, можно узнать смещение поля, относительно базового адреса объекта, только вот этого адреса нету, пока объект не создан.
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
08.04.2011, 12:00 15
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну вот этот момент вы пока и не просекаете.
Вы поймите что есть инстанцирование шаблона в C++, а есть создание экземпляра класса, что также называется инстанцированием в практически всех ОО языках. C++ довольно специфичен в терминологии и расходится с более "чистыми" ОО языками.
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
08.04.2011, 12:12 16
Цитата Сообщение от Deviaphan Посмотреть сообщение
Про метод согласен, но как обратиться к полю, без создания экземпляра (объекта). Т.е. пока не создан объект, нету и полей его. Допустим, можно узнать смещение поля, относительно базового адреса объекта, только вот этого адреса нету, пока объект не создан.
Например, у тебя есть указатель на шаблонный объект. Ты этот объект не создавал (он создан, например, где-то в недрах чужого кода), но инстанциация методов при компиляции твоего кода всё равно происходит. Поле и метод могут быть статическим, а дляработы с ними вообще экземпляр класса не нужен. Но инстанциация тоже делается
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.04.2011, 12:18  [ТС] 17
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, не знаю где вы это вычитали
Не знаю, как другие, я это вычитал в викепедии, тема создана из-за сомнений в правильности понимания.
0
Эксперт С++
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 12:18 18
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вы поймите что есть инстанцирование шаблона в C++, а есть создание экземпляра класса, что также называется инстанцированием в практически всех ОО языках. C++ довольно специфичен в терминологии и расходится с более "чистыми" ОО языками.
Ну, если сами пользователи языка не будут следить за чистотой терминологии, то больше этого делать будет некому.
И тем более не стоит смешивать терминологию нескольких языков.
«Создание экземпляра класса» звучит двусмысленно. В C++ это всегда называлось созданием объекта.
Я уж молчу про «методы» и «сообщения», которых в C++ нет, так здесь на форуме уже шаблоны некоторые называют «родовыми классами». Так мы и до субклассов и суперклассов докатимся.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.04.2011, 12:20  [ТС] 19
Цитата Сообщение от Deviaphan Посмотреть сообщение
е вызывается и экземпляров не создаётся. Т.е. никакого кода сгенерировано не будет
Экземпляры - это объекты, а код бывает только у членов.
0
Эксперт С++
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 12:23 20
Цитата Сообщение от taras atavin Посмотреть сообщение
Цитата Сообщение от Mr.X
Ну, не знаю где вы это вычитали

Я это вычитал в викепедии, тема создана из-за сомнений в правильности понимания.
Ну вот, а здесь на форуме какие-то наивные люди все время просят порекомендовать им учебники. Нет чтобы Википедию почитать.
0
08.04.2011, 12:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2011, 12:23
Помогаю со студенческими работами здесь

Что такое IIS и что такое PWS? Почему одно без другого не работает?
вот уже второй день пытаюсь немного разобраться в АСП. накидал небольшую тестовую страничку. но с...

Что такое напряжение и что такое сила тока с позиции заряженных частиц
Объясните пожалуйста, что такое напряжение и что такое сила тока с позиции заряженных частиц....

Что такое монитор и что такое мьютекс? Это же разные вещи?
Здравствуйте. В разных айти-статьях по-разному используют эти термины, причём часто их путают друг...

Объект TDictionary. Что такое ключ и что такое значение?
Из прочитанного в гугле понял что это нечто наподобие какого-то словаря: Коллекция пар...

Что такое метод equals() и что такое класс Object
Ответи на два вопроса очень надо 1) Что такое метод equals(). Чем он отличается от операции ==....

Что такое токен? Что такое сессия? Отличия от куки
Что такое токен и сессии ? в чем отличия от куков ? Безопасно ли использовать куки? можно ли...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru