С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/222: Рейтинг темы: голосов - 222, средняя оценка - 4.76
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

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

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

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
class A
{
 ...
};
A a; // Это уже инстанцирование A?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2011, 08:21
Ответы с готовыми решениями:

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

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

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

33
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
07.04.2011, 08:24
taras atavin, создание экземпляра класса.
Цитата Сообщение от taras atavin Посмотреть сообщение
Это уже инстанцирование A?
Да.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 07:27
Вообще-то в C++ термин «инстанцирование» применяется к шаблонам.
Шаблон определяет семейство классов или функций. Результат инстанцирования этого шаблона с указанием его аргументов – класс или функция.
Например, вот это инстанцирование:
C++
1
typedef std::complex<int>  T_int_complex;
И вот это тоже:
C++
1
std::complex<char> char_c;
2
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 08:22
Цитата Сообщение от Mr.X Посмотреть сообщение
Вообще-то в C++ термин «инстанцирование» применяется к шаблонам.
Не только. Инстанцирование - создание экземпляра класса. В контексте шаблона речь идёт также и о генерации кода для поддержки соответствующего типа. Для не шаблонных классов, просто создание экземпляра.

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

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

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

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

Я это вычитал в викепедии, тема создана из-за сомнений в правильности понимания.
Ну вот, а здесь на форуме какие-то наивные люди все время просят порекомендовать им учебники. Нет чтобы Википедию почитать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2011, 12:23
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru