Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/140: Рейтинг темы: голосов - 140, средняя оценка - 4.66
73 / 73 / 12
Регистрация: 22.01.2013
Сообщений: 231

Разница между объектом и экземпляром класса

02.03.2013, 21:34. Показов 29034. Ответов 143
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можете объяснить какая между этими понятиями разница?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2013, 21:34
Ответы с готовыми решениями:

Какая разница между eof и просто объектом?
То есть предположим открыли файл и объект input подставили в условие while и внутри считываем строки с файла с помощью getline. Так вот...

Какая разница между объектом класса и инстансом класса?
Читал (на русском языке) и не понял. Добавлено через 6 минут В смысле документацию читал.

В чем разница между объектом класса и ссылкой на него?
В разных источниках используется разная терминология и это путает. Я встречала когда объект называют instance и также ссылкой. Вот, мое...

143
0 / 0 / 0
Регистрация: 23.07.2014
Сообщений: 4
24.07.2014, 00:24
Студворк — интернет-сервис помощи студентам
Я ответил базируясь на знаниях языка C# возможно в С++ данные понятия различны. Но мой ответ довольно точный это не моя фантазия, могу привести примеры и иллюстрации с объяснением.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.07.2014, 00:38
Цитата Сообщение от ghostxx7 Посмотреть сообщение
могу привести примеры и иллюстрации с объяснением
Жги. Только в теме С++, плюсовые примеры.
0
0 / 0 / 0
Регистрация: 23.07.2014
Сообщений: 4
24.07.2014, 01:01
Ещё раз повторюсь что объясню какая разница между объектом и экземпляром класса в C#. Всё дело в том как работает память(точнее куча).
C#
1
2
3
4
5
6
MyClass obj1 = new MyClass (); 
MyClass obj2 = new MyClass ();
obj1.field=2;
obj2.field=10;
obj1.Method();
obj2.Method();
В первой строке как и во второй в памяти выделяется место. Создается 2 экземпляра класса. Но Method() у этих экземпляров один (сделано специально для экономии памяти). Так вот именно объект содержит Method(), а экземпляр содержит field. Между экземпляром и объектом есть свои ссылки.
Нашёл более наглядное объяснение:

Кликните здесь для просмотра всего текста


примерно с 50-й минуты объяснение именно этого вопроса.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.07.2014, 01:04
Цитата Сообщение от ghostxx7 Посмотреть сообщение
Ещё раз повторюсь что объясню какая разница между объектом и экземпляром класса в C#
Нафига ты это делаешь в разделе С++?
Цитата Сообщение от ghostxx7 Посмотреть сообщение
Так вот именно объект содержит Method()
Объект не содержит никаких методов.
Цитата Сообщение от ghostxx7 Посмотреть сообщение
Между экземпляром и объектом есть свои ссылки.
экземпляр = объект
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.07.2014, 01:18
Цитата Сообщение от ghostxx7 Посмотреть сообщение
Ещё раз повторюсь что объясню какая разница между объектом и экземпляром класса в C#.
источник?

Добавлено через 1 минуту
Цитата Сообщение от ghostxx7 Посмотреть сообщение
примерно с 50-й минуты
видеоуроки оставьте себе. ссылайтесь на рихтера, троельсона и прочих авторитетных товарищей
1
0 / 0 / 0
Регистрация: 23.07.2014
Сообщений: 4
24.07.2014, 01:24
Согласен, надо ссылаться на первоисточник тогда не будет такого бардака в голове и на форумах.
0
24.07.2014, 01:35

Не по теме:

Цитата Сообщение от ghostxx7 Посмотреть сообщение
Согласен, надо ссылаться на первоисточник тогда не будет такого бардака в голове и на форумах.
Ты бы хоть в официальную документацию на сайте MS заглянул в качестве первоисточника:
A program may create many objects of the same class. Objects are also called instances,
Objects are also called instances
http://msdn.microsoft.com/en-u... 73110.aspx
Надеюсь, переводить не нужно.

1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.07.2014, 02:07
Цитата Сообщение от Mr.X Посмотреть сообщение
Блин! А меня все время интересовало откуда идет это загаживание терминологии. Оказывается вот где рассадник невежества.
Термин экземпляр класса (он же Instance, как выше написали) зачастую используется во вполне серьезной документации. Если в натуральном языке есть слова "отлично" и "замечательно", которые взаимозаменяемы, это не повод называть всех, кто говорит "отлично" вместо "замечательно" - невежами

Невежество в вопросах а-ля "а в чем между ними разница" и напускание тумана "а вы подумайте сами".
4
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
24.07.2014, 10:01
Цитата Сообщение от egor2116 Посмотреть сообщение
разница между машиной и автомобилем
Меня всегда убивал термин "автомашина".

Цитата Сообщение от Vourhey Посмотреть сообщение
Объект не содержит никаких методов.
Указатели на физическое размещение в памяти этих методов наверное имелось в виду.

Цитата Сообщение от daslex Посмотреть сообщение
Сначала было слово и слово было Объект.Дальше появился первый экземпляр, порожденный объектом, потом второй...., потом баги пошли.
Сначала были скрижали с описанием объекта. По образу и подобию описанного в них появился первый экземпляр, порожденный конструктором, потом второй...., потом баги пошли.


В общем итог темы: разница между объектом и экземпляром класса в том, что хрен его знает трудностях перевода.
1
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
24.07.2014, 10:08
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Указатели на физическое размещение в памяти этих методов наверное имелось в виду.
даже этого нет. В С++, например, все методы глобальные и скрыто (от программиста) принимают указатель на вызывающий объект первым параметром. В Java объект тоже не содержит адресов методов, там наоборот методы содержат указатели (ссылки) на нужные данные (там метод это объект на уровне С++). В C# думаю похожая технология.
1
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
24.07.2014, 10:11
Очевидно, что препод просто сам напридумывал для студентов какую-то свою сомнительную терминологию
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.07.2014, 11:57
Цитата Сообщение от Kastaneda Посмотреть сообщение
даже этого нет. В С++, например, все методы глобальные и скрыто (от программиста) принимают указатель на вызывающий объект первым параметром. В Java объект тоже не содержит адресов методов, там наоборот методы содержат указатели (ссылки) на нужные данные (там метод это объект на уровне С++). В C# думаю похожая технология.
вот очень хорошая картинка, которая показывает устройство типов в C# (ну и вообще для общего развития полезно)

то есть у каждого объекта есть указатель на тип (смещение -2*sizeof(void*) относительно указателя на объект), ну и syncblock, нужный для многопотока.

Что касается методов, то да, каждый метод экземпляра принимает ссылку this (вплоть до соглашения, что при вызове метода указатель на this лежит в eac). Я вообще думал, что так везде
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.07.2014, 12:00
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Указатели на физическое размещение в памяти этих методов наверное имелось в виду.
В объектах и указателей на функции нет. Разве что на vtbl.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
24.07.2014, 12:12
Kastaneda, вот нарисовал тут картинку:


Я не сильный знаток ассемблера, но вот так вот себе все это представляю: собственно в скомпилированном коде программы где-то происходит вызов функции, которая вообще ничего не знает о том, что она кому-то принадлежит. Она просто принимает параметры, и если первый (неявный) параметр не является указателем на правильный класс, то просто не найдется подходящей (полиморфной) функции.

Единственный вопрос только: с данной точки зрения методы класса отличаются от глобальных функций только наличием первого неявного параметра?
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
24.07.2014, 12:14
Цитата Сообщение от Vourhey Посмотреть сообщение
Разве что на vtbl.
Можно немножко сильно поподробнее?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.07.2014, 12:17
SatanaXIII, ну насколько я понимаю, смысл тот же, что и на моей картинке выше - объект содержит ссылку на VMT (таблицу виртуальных методов), в которой производится поиск нужного метода. Если метод не найден, то переходим к VMT базового класса и ищем там, и так до тех пор, пока не найдем нужный метод.

Добавлено через 30 секунд
http://ru.wikipedia.org/wiki/%... 0%BE%D0%B2
http://en.wikipedia.org/wiki/Virtual_method_table
0
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
24.07.2014, 12:40
В С++ эти понятия тождественны.
А пошлО это всё с начала реализации ООП в языке как таковом.
Ибо сначала было понятие обьекта, кто помнит такое типа
Pascal
1
2
3
4
TMyObject = object (TObject)
  ...поля
  ...методы
end;
а потом появилось
C++
1
2
3
4
5
class TMyObj : public TObject
{
public:
...
};
Вот откуда и пошло - обьекты и экземляры класса.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.07.2014, 12:41
krv, если вы думаете, что ООП изобрели в object pascal - должен вас разочаровать
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
24.07.2014, 12:45
Psilon, да, это я все читал. Мне интересно как именно располагается все это в памяти: где лежат таблицы, куда приписывается ссылка на них объекту?..

Цитата Сообщение от krv Посмотреть сообщение
Вот откуда и пошло - обьекты и экземляры наследники класса.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.07.2014, 12:47
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Можно немножко сильно поподробнее?
Когда добавляешь в класс виртуальные функции, то в объекте будет указатель на таблицу виртуальных функций. И только уже эта таблица содержит в себе указатели на функции.

Добавлено через 1 минуту
Цитата Сообщение от SatanaXIII Посмотреть сообщение
где лежат таблицы, куда приписывается ссылка на них объекту?
Это все compiler-dependent. Часто указатель располагается в начале объекта.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.07.2014, 12:47
Помогаю со студенческими работами здесь

Hibernate. какая разница между прокси объектом и lazy инициализацией?
собственно интересует тема сабжа

В чем разница между двумя объявлениями класса
Здравствуйте! Помогите, пожалуйста, разобраться В чем разница между двумя объявлениями: TClassName = class; end; TClassName =...

В чем разница между классом и шаблоном класса?
Помогите ответить. В чем разница между классом и шаблоном класса?

Связать слово с экземпляром класса
Всем доброго времени суток. Второй день ломаю голову (гуглить пробовал - не предлагать), поэтому чтобы не ломать и дальше, решил создать...

Multiprocessing array с экземпляром класса
добрый день. Решил протестировать как будет вести себя программа в мульти поточных вычислениях. Начал разбираться нашёл модуль...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru