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

C++

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

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

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

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

Можно ли инстанцирование класса прописать в самом классе? - C++
Можно ли инстанцирование класса прописать в самом классе?

Что такое фреймворк? - C++
Доброго времени суток. Объясните пожалуйста на счет фреймворков. Несколько минут погуглив я примерно понял что это такое, но все же...

Что такое стрип? - C++
Говорят, релизные бинарники надо стрипать. А что такое стрип и как его делать?

Что такое компилятор, и где его взять? - C++
Здравствуйте дорогие форумчане! Вот начал изучать по самоучителям С++ и сталкнулся с таким термином, как компилятор. Я так понял он...

Что такое compile-time алгоритмы и для чего они нужны? - C++
А есть от них хоть какая-то практическая польза? По-моему нет

Как можно сделать такое? (Автоматическое нажатие клавиш и все что с этим связанно) - C++
У меня возник вопрос как можно сделать чтоб программа автоматически нажимала на определенные клавиши? Например в игре GTA SAMP: Чтоб...

32
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
07.04.2011, 08:24 #2
taras atavin, создание экземпляра класса.
Цитата Сообщение от taras atavin Посмотреть сообщение
Это уже инстанцирование A?
Да.
0
Mr.X
Эксперт С++
3049 / 1694 / 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;
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 08:22 #4
Цитата Сообщение от Mr.X Посмотреть сообщение
Вообще-то в C++ термин «инстанцирование» применяется к шаблонам.
Не только. Инстанцирование - создание экземпляра класса. В контексте шаблона речь идёт также и о генерации кода для поддержки соответствующего типа. Для не шаблонных классов, просто создание экземпляра.

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

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

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

Добавлено через 11 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я к тому, что без создания объекта инстанцирования вообще нет.)
А вот тут у вас пока недопонимание. Инстанцирование - это создание типа или функции из шаблона. При чем тут объекты?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 10:20 #9
Цитата Сообщение от Mr.X Посмотреть сообщение
При чем тут объекты
При том, что инстанцирование - создание экземпляра, а не типа.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
08.04.2011, 10:24 #10
Deviaphan, Создание экземпляра класса, но не объекта.
Инстанцирование (англ. instantiation) — создание экземпляра класса. В отличие от слова «создание», применяется не к объекту, а к классу. То есть, говорят: «(в виртуальной среде) создать экземпляр класса или инстанцировать класс». Порождающие шаблоны используют полиморфное инстанцирование.
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 10:32 #11
Цитата Сообщение от Deviaphan Посмотреть сообщение
При том, что инстанцирование - создание экземпляра, а не типа.
Ну вот этот момент вы пока и не просекаете. Именно типа!
Прежде чем рассуждать, не вредно и в учебник заглянуть, а в нем сказано (у Страуструпа): "процесс генерации объявления класса по шаблону класса и аргументу шаблона называется инстанцированием шаблона".
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 10:41 #12
В сообщении №4 я это и написал.
А теперь погугли слово экземпляр ещё.)
0
Evg
Эксперт CАвтор FAQ
17937 / 6166 / 411
Регистрация: 30.03.2009
Сообщений: 16,929
Записей в блоге: 27
08.04.2011, 10:56 #13
Цитата Сообщение от Deviaphan Посмотреть сообщение
При том, что инстанцирование - создание экземпляра, а не типа.
На самом деле как бы создание типа. Ты можешь вызывать метод класса или использовать поле класса без создания экземпляра класса. И инстанциация произойдёт. По стандарту скорее всего должно быть действительно так, что при любом упоминании шаблона с параметром происходит инстанциация всего, что растёт от этого шаблона, а то, что неиспользуемые методы не будут генериться, возможно это оптимизация. С другой стороны я не знаю, как это с формальной точки зрения соотносится с тем, что класс может быть описан в отдельном шаблоне, а метод - в отдельном. Но в итоге можно считать, что происходит именно то, о чём я писал выше: генерится код только для того, что реально используется
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 11:27 #14
Ты можешь вызывать метод класса или использовать поле класса без создания экземпляра класса
Про метод согласен, но как обратиться к полю, без создания экземпляра (объекта). Т.е. пока не создан объект, нету и полей его. Допустим, можно узнать смещение поля, относительно базового адреса объекта, только вот этого адреса нету, пока объект не создан.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
08.04.2011, 12:00 #15
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну вот этот момент вы пока и не просекаете.
Вы поймите что есть инстанцирование шаблона в C++, а есть создание экземпляра класса, что также называется инстанцированием в практически всех ОО языках. C++ довольно специфичен в терминологии и расходится с более "чистыми" ОО языками.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2011, 12:00
Привет! Вот еще темы с ответами:

Что такое TPoint, как пользоваться и что подставлять. - C++ Builder
function WindowFromPoint( Point: TPoint ): HWND; есть функция, обьясните пожалуйста или дайте чтото почитать, гугл юзал не нашел, что...

Что такое 1L? - C++ Builder
Приходится разбираться в чужом коде. Сначала была не понятна эта строчка: double v = 0L; Но погуглив, я узнала, что 0L - это некое...

что такое {;} ? - C++ Builder
Подскажите пожалуйста что значит вот это {;} Добавлено через 32 секунды в этом коде: #include &lt;vcl.h&gt; #pragma hdrstop ...

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
08.04.2011, 12:00
Ответ Создать тему
Опции темы

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