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

C++

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

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

07.04.2011, 08:21. Просмотров 14323. Ответов 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
Evg
Эксперт CАвтор FAQ
18252 / 6377 / 438
Регистрация: 30.03.2009
Сообщений: 17,652
Записей в блоге: 28
08.04.2011, 12:12 #16
Цитата Сообщение от Deviaphan Посмотреть сообщение
Про метод согласен, но как обратиться к полю, без создания экземпляра (объекта). Т.е. пока не создан объект, нету и полей его. Допустим, можно узнать смещение поля, относительно базового адреса объекта, только вот этого адреса нету, пока объект не создан.
Например, у тебя есть указатель на шаблонный объект. Ты этот объект не создавал (он создан, например, где-то в недрах чужого кода), но инстанциация методов при компиляции твоего кода всё равно происходит. Поле и метод могут быть статическим, а дляработы с ними вообще экземпляр класса не нужен. Но инстанциация тоже делается
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.04.2011, 12:18  [ТС] #17
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, не знаю где вы это вычитали
Не знаю, как другие, я это вычитал в викепедии, тема создана из-за сомнений в правильности понимания.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 12:18 #18
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вы поймите что есть инстанцирование шаблона в C++, а есть создание экземпляра класса, что также называется инстанцированием в практически всех ОО языках. C++ довольно специфичен в терминологии и расходится с более "чистыми" ОО языками.
Ну, если сами пользователи языка не будут следить за чистотой терминологии, то больше этого делать будет некому.
И тем более не стоит смешивать терминологию нескольких языков.
«Создание экземпляра класса» звучит двусмысленно. В C++ это всегда называлось созданием объекта.
Я уж молчу про «методы» и «сообщения», которых в C++ нет, так здесь на форуме уже шаблоны некоторые называют «родовыми классами». Так мы и до субклассов и суперклассов докатимся.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.04.2011, 12:20  [ТС] #19
Цитата Сообщение от Deviaphan Посмотреть сообщение
е вызывается и экземпляров не создаётся. Т.е. никакого кода сгенерировано не будет
Экземпляры - это объекты, а код бывает только у членов.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.04.2011, 12:23 #20
Цитата Сообщение от taras atavin Посмотреть сообщение
Цитата Сообщение от Mr.X
Ну, не знаю где вы это вычитали

Я это вычитал в викепедии, тема создана из-за сомнений в правильности понимания.
Ну вот, а здесь на форуме какие-то наивные люди все время просят порекомендовать им учебники. Нет чтобы Википедию почитать.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.04.2011, 12:36  [ТС] #21
И вообще вы такого нагородили, что только запутали.
Инстанцирование (англ. instantiation) — создание экземпляра класса. В отличие от слова «создание», применяется не к объекту, а к классу. То есть, говорят: «(в виртуальной среде) создать экземпляр класса или инстанцировать класс». Порождающие шаблоны используют полиморфное инстанцирование.
(смотри вику). Вопрос всего лишь вот в чём: "Называется ли инстанцированием только создание экземпляра класса каким то не известным мне образом прописанное в коде самого класса, или декларация объекта подобная декларации обычной переменной, только с классом в качестве типа уже есть инстацирование?".

Добавлено через 2 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Создание экземпляра класса, но не объекта.
Это синонимы, их нельзя противопоставлять. Объект есть экземпляр своего класса, экземпляр класса есть объект. А функции - не экземпляры.

Добавлено через 4 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
Т.е. пока не создан объект, нету и полей его.
Про статик поля забыл?

Добавлено через 4 минуты
Цитата Сообщение от Evg Посмотреть сообщение
Например, у тебя есть указатель на шаблонный объект. Ты этот объект не создавал (он создан, например, где-то в недрах чужого кода), но инстанциация методов при компиляции твоего кода всё равно происходит.
А какая разница, кто создал? Объект уже создан, потом ты обращаешься к его полю. Что здесь особенного? Или если я миллион раз обращусь к одному и тому же своему объекту, то его класс тоже миллион раз инстанцируется?
0
Evg
Эксперт CАвтор FAQ
18252 / 6377 / 438
Регистрация: 30.03.2009
Сообщений: 17,652
Записей в блоге: 28
08.04.2011, 12:37 #22
Цитата Сообщение от Mr.X Посмотреть сообщение
«Создание экземпляра класса» звучит двусмысленно
А в чём двусмысленность?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 12:38 #23
Цитата Сообщение от Mr.X Посмотреть сообщение
Я уж молчу про «методы»
И правильно молчите.) Методы в С++ есть.

Цитата Сообщение от Mr.X Посмотреть сообщение
«Создание экземпляра класса» звучит двусмысленно.
Как раз это звучит однозначно. А вот слово инстанцирование можно понять двояко, в зависимости от "шаблонного" контекста.

Добавлено через 59 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
Про статик поля забыл?
Каюсь. Забыл.)
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.04.2011, 12:44  [ТС] #24
Цитата Сообщение от Mr.X Посмотреть сообщение
«методы»... которых в C++ нет
Да ну?
Методом называется подпрограмма-член класса.
В c++ нет функций-членов класса? Или функции перестали быть подпрограммами?

Добавлено через 5 минут
Цитата Сообщение от Mr.X Посмотреть сообщение
а здесь на форуме какие-то наивные люди все время просят порекомендовать им учебники. Нет чтобы Википедию почитать.
А с каких это пор вика перестала отражать общепринятую точку зрения? Тема же о терминологии, а именно терминология по идее правильно общепринятая. Ведь в принципе любой термин - пустой звук, значение же ему назначают люди. Например, электрон мог бы называться хоть казитоном - достаточно, чтоб люди использовали это слово для его обозначения.
0
CyBOSSeR
Эксперт С++
2304 / 1674 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
08.04.2011, 13:10 #25
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, если сами пользователи языка не будут следить за чистотой терминологии, то больше этого делать будет некому.
Терминология нужна должна быть понятной большинству разработчиков. Любому разработчику понятно значение слов "метод" "поле". А произносить "функция-член", "данные-члены" лично у меня язык не поворачивается.
Цитата Сообщение от Mr.X Посмотреть сообщение
И тем более не стоит смешивать терминологию нескольких языков.
Смешивать не стоит, стоит использовать общепризнанную терминологию.
Цитата Сообщение от Mr.X Посмотреть сообщение
«Создание экземпляра класса» звучит двусмысленно.
Это как?
Цитата Сообщение от Mr.X Посмотреть сообщение
В C++ это всегда называлось созданием объекта.
И в других языках тоже. Это синонимы.
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.04.2011, 13:29  [ТС] #26
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Терминология нужна должна быть понятной большинству разработчиков. Любому разработчику понятно значение слов "метод" "поле". А произносить "функция-член", "данные-члены" лично у меня язык не поворачивается.
Полем как раз и называется данное-член, а методом - подпрограмма-член. Такой вариант тоже должен быть понятен любому девелоперу, но лично мне тоже удобнее "поле" и "метод". Причём, в делфях, например, есть ещё и процедуры-члены, они тоже являются классами и при этом там есть и функции-члены, но функция-член и процедура-член - не одно и тоже. Поэтому в разговоре с пасквилянтом я никогда не применю слово "метод" за исключением тех случаев, когда абсолютно не важно, возвращает ли метод вообще хоть какое то значение. То есть этим словом в разговоре с пасквилянтом я могу заменить слова "подпрограмма-челн", но не "функция-член" и не "процедура-член".
0
besh]<a
13 / 11 / 1
Регистрация: 02.11.2009
Сообщений: 194
25.10.2011, 17:20 #27
правильно ли я понял, что экземпляры класса могут по разному инстанцироваться, при этом они будут иметь разную архитектуру?
0
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
26.10.2011, 08:24 #28
хех! а почему я раньше эту тему не видел...
вставлю свои пять копеек.
подобная путаница в терминологии возникает довольно часто. и как правило, я не помню хоть одну подобную тему, которая закончилась бы однозначно.

кто-то там говорил про инстанцирование как про создания объекта, и отрицал тот факт, "ручная" специализация шаблона создает объекты. от части это справедливо. но давайте вспомним про метапрограммирование. там вообще нет объектов. все - типы.
и как бы вы назвали типы в данном контексте? объектами? инстансами?

Цитата Сообщение от besh
правильно ли я понял, что экземпляры класса могут по разному инстанцироваться, при этом они будут иметь разную архитектуру?
зависит от контекста в котором ты спрашиваешь.
0
ht1515
шарпопочитатель
58 / 25 / 1
Регистрация: 31.01.2010
Сообщений: 961
17.01.2012, 21:46 #29
Цитата Сообщение от Deviaphan Посмотреть сообщение
При том, что инстанцирование - создание экземпляра, а не типа.
а вроде это одно и тоже... в том плане что экземпляры это пользовательские типы
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
17.01.2012, 21:50 #30
типы - это типы, экземпляры - это экземпляры. не надо их путать
в записи
C++
1
Х х;
Х - тип
х - экземпляр
0
17.01.2012, 21:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2012, 21:50
Привет! Вот еще темы с ответами:

Что такое 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++
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?


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

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

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