![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Syberex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
вот написал класс свой стринговый пашет чюдестно, только вод одна трабла, как убрать из области видимости переменные которые определены в классе и влияют на его размер.
вот начало кода класса
MyString StrWord; sizeof(StrWord) выдаёт кучу байтов включая int -егиты всякие, а мне всеголишь нужно чтоб выдавал размер класса как размер строки char * str ; // указатель на массив Char, как в классе string,ведь там тоже ведь есть переменные в классе, но sizeof их не видит. P.s вынести переменные за класс и переписать sizeof не предлагать. --------------------
whole power in artificial intelligences |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 1 Всего: 3 |
не катит?! --------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
Syberex |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
блин, не правильно поняли, у меня есть функция которая возвращает длину строки, мне не это нужно,
вот класс
а теперь объявляя структуру с использованием моего класса
и когда с делать sizeof MyString аWord; в размер входят из моего класса и другие переменные класса, мне это не нужно, хочу чтоб sizeof видел мой класс как размер строки и всё, ну как стринг, понимаете? вот тут трабла Это сообщение отредактировал(а) Syberex - 25.9.2007, 13:02 --------------------
whole power in artificial intelligences |
||||
|
|||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
Syberex |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
эт я понимаю, резервирует размер памяти, мне это и нужно что видел какой размер массива выделен и всё Добавлено через 2 минуты и 42 секунды
а если очень хочется ![]() --------------------
whole power in artificial intelligences |
||||
|
|||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
Syberex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
ну как это нельзя , не понимаю , если я захочу записать в файл структура с ипользованием моего класса, то зачем мне сохронять остальные переменные класса? вот я и хочу убрать из области видимости лишние переменные и сделать ну может функцию перегрузки возврата размера, потому что скажем FILE * R; тоже попытаеться записать все переменные в файл.
--------------------
whole power in artificial intelligences |
|||
|
||||
zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
Syberex, такие вещи как sizeof должны вести себя предсказуемо. а сохранение можно сделать и по человечески, например написать методы для загрузки и сохранения объекта... Добавлено через 1 минуту и 22 секунды
Добавлено через 3 минуты и 6 секунд или перегрузить операторы >> и << для std::istream/ostream, если iostream используешь |
||||
|
|||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
Syberex, то что ты хочешь сделать возможно только перегрузив оператор sizeof , но перегружать его религия не позволяет, поэтому вообще это невозможно. Но даже если такое было бы возможно, то твои колеги оторвали бы тебе руки за такое использование sizeof. Этим оператором узнают размер самого объекта, а не того чем этот объект владеет. И твои переменные, которые входят в объект определяют его размер и скрывать их от sizeof , мягко говоря, идиотизм.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Если я не ошибаюсь, значение sizeof определяется уже на этапе компиляции.
|
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ты, видимо, хочешь сохранить только адрес своей строки char* и потом круто радоваться при чтении? ![]() ![]() ![]() В любом случае, как уже было сказано, для сериализации классов (которые не POD) нужно писать конкретные функции - нельзя обойтись write (ptr, size). А раз так - какая разница, что в классе хранится? Сериализуй, что хочешь... А что касается string - действительно, некоторые реализации дают sizeof == 4, т.е. там только указатель. Но это вовсе не указатель на строку - сначала там длина, потом, возможно , что-то еще, и только потом строка. А MFC поступает вообще через ... Размер CString тоже 4, и мы отладчиком видим указатель прямо на строку. Только вот реальный выделяемый буфер начинается чуть раньше, и там содержится служебная информация, а в объект записывается сдвинутый указатель, прямо на строку ... -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |