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

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

Войти
Регистрация
Восстановить пароль
 
Andreyasu
2 / 2 / 0
Регистрация: 02.07.2009
Сообщений: 52
#1

Интерфейсы - C++

25.05.2013, 22:35. Просмотров 366. Ответов 4
Метки нет (Все метки)

Вот не могу понять , берем вот такую структуру
C++
1
2
3
4
5
class Ab  //интерфейс
{
public:
virtual void GetNum()=0;
};
C++
1
2
3
4
5
6
7
8
class reAb:public Ab //реализация интерфейса
{
public:
reAb():Mylong(10000) {};
void GetNum() {cout<< Mylong <<endl;};
long long Mylong;
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
int _tmain(int argc, _TCHAR* argv[])
{
Ab *kol=new reAb;
kol->GetNum();
 
cout<< sizeof(Ab)<<endl;
cout<< sizeof(reAb)<<endl;
cout<< sizeof(*kol);
 
 cin.get();
return 0;
}
На выходе получим
C++
1
2
3
4
10000
4
16
4
А вот теперь вопрос, если размер объекта kol равен 4, то как я понимаю при работе программы он занимает в памяти 4 байта, а где храниться значение Mylong???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 22:35     Интерфейсы
Посмотрите здесь:

C# Интерфейсы
C++ Необычные пользовательские интерфейсы
Интерфейсы и наследования C++
C++ интерфейсы в с ++
интерфейсы Java SE
C# Интерфейсы
Для чего нужны интерфейсы? C++
Интерфейсы Java SE
Абстрактные классы. Интерфейсы C++
C# интерфейсы C#
Указатели на интерфейсы и их освобождение C++
Интерфейсы в с++ дайте кто нибудь годный рабочий пример C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12730 / 7190 / 802
Регистрация: 27.09.2012
Сообщений: 17,738
Записей в блоге: 2
Завершенные тесты: 1
25.05.2013, 22:55     Интерфейсы #2
C++
1
cout<< sizeof(*kol);
У Вас указатель на тип Ab, поэтому и получите sizeof(Ab)
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
25.05.2013, 23:09     Интерфейсы #3
Andreyasu, Да я от тоже смотрю на код и не понимаю почему Ab у тебя весит 4 байта? В классе Ab нету ни одного члена, а размер класса насколько я знаю это сумма размеров его членов. Странно как то у тебя 0 должно вывестись. Дальше идем Объект reAb тут у тебя есть один член long long Mylong от у тебя объект должен иметь размер такой же как этот член. Чото я такой тип не использовал никогда да и не помню что бы про него читал long long какой то странный тип, ну да ладно . Ну а указатель *kol конечно же имеер такой же размер как и ab так как Ab у тебя не 0 я хз. почему, как то странно честно, значит и указатель не 0 а 4.

Где хранится? Да хранится наверно по адресу куда указывает этот указатель. Тыж наверно sizeof сам вес указателя вывел, хотя раньше он указывал на ячейку Ab которая 4 байта, а ты ему присвоил другую ячейку которая 16 байт reAb и думаешь он теперь станет 16 байт, а от видешь фиг как был он 4байта так и остался. Давай наверно придумаем уже что произошло вместе. Я тоже не знаю и тоже думаю долно вывестись 16, но увы действительность другая и вывелось у нас 4. Значить это может, то что просто сам указатель имеет какойто размер так как указатель на ячейку Ab то при выводе sizeof мы получаем размер Ab, и когда мы присваиваем этому указателю другую ячейку, то размер все рамно не меняется (ты только проверял и сейчас спрашиваешь, почему так ) наверно размер при вызове sizeof для указателя на Ab не смотрит размер самой ячейки на которую указывает, а просто выводит число байт которое занимает Ab и это не наверное, а точно, либо сама переменная указатель занимает в памяти столько места, скорее всего переменная-указатель занимает столько места. .
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
25.05.2013, 23:13     Интерфейсы #4
Цитата Сообщение от ninja2 Посмотреть сообщение
Странно как то у тебя 0 должно вывестись.
Во-первых, 0 "весить" точно не получится - у каждого объекта должен быть свой уникальный адрес. Во-вторых, указатель на таблицу виртуальных функций...
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
25.05.2013, 23:39     Интерфейсы #5
Указатель на таблицу виртуальных функций (4 байта) + поле типа long long (8 байт) + выравнивание его по границе восьми байт.
Yandex
Объявления
25.05.2013, 23:39     Интерфейсы
Ответ Создать тему
Опции темы

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