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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 87, средняя оценка - 4.85
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
#1

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

02.03.2013, 21:34. Просмотров 14804. Ответов 142
Метки нет (Все метки)

Можете объяснить какая между этими понятиями разница?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2013, 21:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разница между объектом и экземпляром класса (C++):

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

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

Ошибка при работе с объектом класса в конструкторе другого класса - C++
Имеется данный код: https://github.com/ubelian/glgame/tree/master/glgame В файле Food.cpp в конструкторе класса Food::Food() на 19...

Создание объекта класса с полем являющимся объектом другого класса - C++
Bill a; cin>>a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у Spiska(Bill A,int,string,int) ...

Вызов объектом базового класса функцию из производного класса! - C++
Как можно осуществить вызов или передачу значения в базовый класс для дальнейшего вычисления этого значения в производном классе. Вот...

Почему при компилировании программы со вторым экземпляром класса изменяются значения первого? - C++
Здравствуйте. Вопрос: почему при компилировании программы со вторым экземпляром класса изменяются значения первого? namespace SALES { ...

142
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
24.07.2014, 10:11 #31
Очевидно, что препод просто сам напридумывал для студентов какую-то свою сомнительную терминологию
0
Psilon
Master of Orion
Эксперт .NET
5914 / 4811 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
24.07.2014, 11:57 #32
Цитата Сообщение от Kastaneda Посмотреть сообщение
даже этого нет. В С++, например, все методы глобальные и скрыто (от программиста) принимают указатель на вызывающий объект первым параметром. В Java объект тоже не содержит адресов методов, там наоборот методы содержат указатели (ссылки) на нужные данные (там метод это объект на уровне С++). В C# думаю похожая технология.
вот очень хорошая картинка, которая показывает устройство типов в C# (ну и вообще для общего развития полезно)
Разница между объектом и экземпляром класса
то есть у каждого объекта есть указатель на тип (смещение -2*sizeof(void*) относительно указателя на объект), ну и syncblock, нужный для многопотока.

Что касается методов, то да, каждый метод экземпляра принимает ссылку this (вплоть до соглашения, что при вызове метода указатель на this лежит в eac). Я вообще думал, что так везде
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
24.07.2014, 12:00 #33
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Указатели на физическое размещение в памяти этих методов наверное имелось в виду.
В объектах и указателей на функции нет. Разве что на vtbl.
0
SatanaXIII
Супер-модератор
Эксперт С++
5643 / 2678 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 1
24.07.2014, 12:12 #34
Kastaneda, вот нарисовал тут картинку:
Разница между объектом и экземпляром класса

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

Единственный вопрос только: с данной точки зрения методы класса отличаются от глобальных функций только наличием первого неявного параметра?
1
SatanaXIII
Супер-модератор
Эксперт С++
5643 / 2678 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 1
24.07.2014, 12:14 #35
Цитата Сообщение от Vourhey Посмотреть сообщение
Разве что на vtbl.
Можно немножко сильно поподробнее?
0
Psilon
Master of Orion
Эксперт .NET
5914 / 4811 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
24.07.2014, 12:17 #36
SatanaXIII, ну насколько я понимаю, смысл тот же, что и на моей картинке выше - объект содержит ссылку на VMT (таблицу виртуальных методов), в которой производится поиск нужного метода. Если метод не найден, то переходим к VMT базового класса и ищем там, и так до тех пор, пока не найдем нужный метод.

Добавлено через 30 секунд
http://ru.wikipedia.org/wiki/%D0%A2%...B4%D0%BE%D0%B2
http://en.wikipedia.org/wiki/Virtual_method_table
0
krv
74 / 54 / 11
Регистрация: 10.07.2014
Сообщений: 328
24.07.2014, 12:40 #37
В С++ эти понятия тождественны.
А пошлО это всё с начала реализации ООП в языке как таковом.
Ибо сначала было понятие обьекта, кто помнит такое типа
Pascal
1
2
3
4
TMyObject = object (TObject)
  ...поля
  ...методы
end;
а потом появилось
C++
1
2
3
4
5
class TMyObj : public TObject
{
public:
...
};
Вот откуда и пошло - обьекты и экземляры класса.
0
Psilon
Master of Orion
Эксперт .NET
5914 / 4811 / 634
Регистрация: 10.07.2011
Сообщений: 14,409
Записей в блоге: 5
Завершенные тесты: 4
24.07.2014, 12:41 #38
krv, если вы думаете, что ООП изобрели в object pascal - должен вас разочаровать
0
SatanaXIII
Супер-модератор
Эксперт С++
5643 / 2678 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 1
24.07.2014, 12:45 #39
Psilon, да, это я все читал. Мне интересно как именно располагается все это в памяти: где лежат таблицы, куда приписывается ссылка на них объекту?..

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

Добавлено через 1 минуту
Цитата Сообщение от SatanaXIII Посмотреть сообщение
где лежат таблицы, куда приписывается ссылка на них объекту?
Это все compiler-dependent. Часто указатель располагается в начале объекта.
2
SatanaXIII
Супер-модератор
Эксперт С++
5643 / 2678 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 1
24.07.2014, 12:49 #41
Цитата Сообщение от Vourhey Посмотреть сообщение
уже эта таблица содержит в себе указатели на функции
ну справедливо.

А для глобальных функций существует таблица? Или как происходит к ним обращение?
0
krv
74 / 54 / 11
Регистрация: 10.07.2014
Сообщений: 328
24.07.2014, 13:20 #42
Цитата Сообщение от Psilon Посмотреть сообщение
krv, если вы думаете, что ООП изобрели в object pascal - должен вас разочаровать
Нет, я так не думаю. Просто привёл пример описания и названия сущностей ООП в двух самых распространённых (на время начала внедрения ООП) языках, на которых все учились, в том числе и те проФФесора, что спросили топикстартера.
Пример откуда взялись названия "объект" и "класс" как таковые.
SatanaXIII, именно экземпляры, про наследование - это другая тема.
У глобальных функций есть просто адрес как таковой. и идёт вызов по адресу
Assembler
1
call addr
хотя там от модели памяти когда то зависело...
в виндовс модель одна, так что тоже не актуально.

Не по теме:

зы. За ошибки можете пинать, а за опечатки - не надо, новая клава на новой работе, еще не привык.

0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
24.07.2014, 14:04 #43
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А для глобальных функций существует таблица? Или как происходит к ним обращение?
По адресу/смещению. Таблицы создадутся для функций импортируемых из других библиотек.
0
gru74ik
Эксперт CЭксперт С++
4207 / 1853 / 198
Регистрация: 20.02.2013
Сообщений: 4,992
Записей в блоге: 22
24.07.2014, 14:07 #44
Цитата Сообщение от Mr.X Посмотреть сообщение
Как заметил Чехов, умный любит учиться, а дурак учить. Смысл слушать «профессоров»? Лучше книжки толковые почитать.
Толковая, вроде, книжка:
Цитата Сообщение от Стивен Прата
"Язык программирования С++. Лекции и упражнения" (2012, 6-е издание), Глава 10, стр. 530:

Класс — это определяемый пользователем тип, а объект — экземпляр класса.
1
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
24.07.2014, 16:30 #45
Цитата Сообщение от gru74ik Посмотреть сообщение
Толковая, вроде, книжка
На самом деле объект там определяется на странице 36 без использования термина "экземпляр", а то место, которое вы цитируете, - это резюме в конце главы с повторением пройденного.
Понятие объекта у него определяется все же темно как-то, так что не очень толковая книжка в смысле строгости теории.
0
24.07.2014, 16:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2014, 16:30
Привет! Вот еще темы с ответами:

Возврат значения объектом класса - C++
Может ли экземпляр класса возвращать значение своего поля без обращения к полю напрямую например class MyClass { int val = 5;...

Действие над объектом класса выполняет: - C++
Кому не сложно, помогите с тестом :)

Задача на строки, с объектом класса string - C++
Дано осмысленное текстовое сообщение, разделенное пробелами и знаками препинания, в конце ставится точка. Поменять слова в сообщении по...

Конструктор с параметром-объектом того же класса - C++
Была поставлена задача: определить конструктор с параметром-объектом того же класса, но я совсем не понимаю, что от меня требуется?...


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

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

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