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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.94
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
#1

Как узнать размер объекта класса? - C++

19.12.2010, 01:29. Просмотров 5020. Ответов 10
Метки нет (Все метки)

Здравствуйте, Дамы и Господа!
Есть ли функция, передающая значение количества байт, отведенных в памяти для объекта класса?
Например для такого класса:
C++
1
2
3
4
5
6
7
8
9
10
class mas
{
     int *a;
public:
     int *f()
     {
            a=new int[10];
            return a;
     }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2010, 01:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как узнать размер объекта класса? (C++):

Узнать размер (количество) массива объектов класса - C++
Допустим, у меня есть такой массив объектов: TGameEnemy enemies = { TGameEnemy(), TGameEnemy(), TGameEnemy() }; Мне необходимо...

Как в классе А у объекта класса B вызвать метод класса B ? - C++
Есть Класс A и класс B . В классе B лежит объект типа ArrayList , назовём его arrayList, в этом же классе есть метод push() . Возможно ли в...

как узнать,является данный объект класса А1 наследником класса А2 - C++
Всем привет)есть классы S, A1, A2, B1, B2. Иерархия наследования следующая S - Является родителем для всех классов и он имеет...

Как узнать размер файла - C++
Вобщем программа -кодировщик методом Хаффмана, взята из интернета. Нужно добавить к ней вывод размера входного файла и сжатого.. ...

как узнать размер строки? - C++
есть массив указателей string **str на объекта класс string; как узнать размер строки, записанной, например, в *str?

Как узнать размер массива - C++
В задаче нужно для решения узнать размер массива. Если sizeof() возвращает кол-во занятой памяти в байтах, и sizeof(char)=2, то ...

10
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
19.12.2010, 01:31 #2
sizeof() ?
0
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 01:39  [ТС] #3
Так?
C++
1
2
3
4
5
6
7
8
void _tmain(int argc, _TCHAR* argv[])
{
    mas s;
        s.f();
    int t=sizeof(s);
    cout<<t<<endl;
    _getch();
}
пишет 4
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
19.12.2010, 01:44 #4
Дмитрий3.09, все верно.
0
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 01:46  [ТС] #5
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
все верно.
Но ведь объект создается с вектором "а" который состоит из десяти элементов типа int... по-моему должно быть как минимум 80 байт... почему 4 пишет?
0
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
19.12.2010, 01:52 #6
Цитата Сообщение от Дмитрий3.09 Посмотреть сообщение
Но ведь объект создается с вектором "а" который состоит из десяти элементов типа int... по-моему должно быть как минимум 80 байт... почему 4 пишет?
Потому что содержимое объекта не сам вектор(массив наверное на самом деле?), а лишь указатель на него.
Вы не предусмотрели в объекте места для массива, только для указателя.
0
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 01:55  [ТС] #7
а как в таком случае предусмотреть в объекте места для динамического массива?
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
19.12.2010, 02:02 #8
Если вы имеете в виду, что доступ к той же области памяти можно получить извне класса, то да.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class mas
{
     int *a;
public:
     int *f()
     {
            a=new int[10];
            return a;
     }
};
 
int main()
{
     mas m;
     int *a = m.f();
     // a == m.a
}
1
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
19.12.2010, 02:05 #9
Цитата Сообщение от Дмитрий3.09 Посмотреть сообщение
а как в таком случае предусмотреть в объекте места для динамического массива?
В том виде как вы это сейчас говорите - никак.
В C/C++ статическая типизация, размер всех объектов должен быть известен на этапе компиляции.
1
Дмитрий3.09
1 / 1 / 0
Регистрация: 17.12.2010
Сообщений: 12
19.12.2010, 02:17  [ТС] #10
Тогда можете подсказать, как узнать размер объекта? Идея в том, что должна быть еще одна функция-член (допустим f2()), которая "изучает" этот массив и изменяет его размер в случае необходимости. Размер объекта не должен превышать определённых значений.
0
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
19.12.2010, 02:22 #11
Цитата Сообщение от Дмитрий3.09 Посмотреть сообщение
Тогда можете подсказать, как узнать размер объекта? Идея в том, что должна быть еще одна функция-член (допустим f2()), которая "изучает" этот массив и изменяет его размер в случае необходимости. Размер объекта не должен превышать определённых значений.
Ну так сохраняйте число элементов в момент присваивания.
А потом возвращайте (sizeof(Object) + N * sizeof(type)).

На всякий случай: Вы не можете знать где именно в памяти будет находиться массив.
Он не будет рядом с объектом.
0
19.12.2010, 02:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2010, 02:22
Привет! Вот еще темы с ответами:

Как узнать размер массива? - C++
Нужно узнать размер введенного пользователем массива, но sizeof() почему-то не работает, помогите пожалуйста разобраться! int...

Как узнать размер массива? - C++
Имею функцию template &lt;typename T&gt; int funk(T mas, T element) { //kod }

Как верно узнать размер указателя ? - C++
СBaseTest* pTest = { new СBaseTest, new СOther }; Нужно узнать размер pTest

Как узнать размер папки и её подкаталогов - C++
Всем привет. Возник вопрос: &quot;Как узнать размер папки и её подкаталогов&quot; Перерыв кучу информации я понял, что напрямую узнать...


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

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

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