Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция-член не возвращает результат (?) 
V
    Опции темы
mes
Дата 8.10.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(FlySabaka @  8.10.2010,  12:29 Найти цитируемый пост)
как нам удаётся получить доступ к закрытым данным класса делая такой вот финт:

так как правила доступа распространяются на классы, а не объекты..
т.е для вашего случая : в любом объекте можно получить доступ к приватным данным другого объекта того же класса smile


--------------------
PM MAIL WWW   Вверх
FlySabaka
Дата 8.10.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.9.2010
Где: г.Новосибирск

Репутация: нет
Всего: нет



mesbsa, ещё раз спасибо за помощьsmile
PM MAIL   Вверх
mes
Дата 8.10.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



кстати для удобства NUMBER я бы сделал не дефайном, а енумом и внутри класса..



--------------------
PM MAIL WWW   Вверх
Crafty
Дата 8.10.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Код

HugeInteger addHugeInteger(HugeInteger const &other); // к данному числу прибавить other

я бы вместо этой функции лучше бы перегрузил оператор + и +=, так было бы удобней и наглядней работать с классом.
PM MAIL   Вверх
FlySabaka
Дата 8.10.2010, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.9.2010
Где: г.Новосибирск

Репутация: нет
Всего: нет



Crafty, поскольку я пишу "учебный" код, то я и перегрузку операций сделаю. У меня ещё все в переди  smile 

Цитата
 
кстати для удобства NUMBER я бы сделал не дефайном, а енумом и внутри класса..


Пока не оч понимаю, а в чём будет заключаться удобство?
PM MAIL   Вверх
mes
Дата 8.10.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(FlySabaka @  8.10.2010,  16:19 Найти цитируемый пост)
Пока не оч понимаю, а в чём будет заключаться удобство? 

 define таит в себе очень много проблем.. например игнорирование области видимости, которое заставляет выбирать для него длинные имена, чтоб избежать коллизии.. В общем придет с опытом..
а пока возьмите за правило  не использовать дефайн, где можно обойтись другими средствами

вот например дефайн удобно использовать как задание опции при компиляции.. т.е. что укажете компилятору, то он и подставит..
Но в таких случаях желательно использовать более уникальное имя и дать возможность его переопределить "снаружи".

т.е. для Вашего случая выглядело бы примерно так :
Код


// на случай если не определен дефайн
// определяем его со значением по умолчанию.

#ifndef  HUGEINTEGER_INNERDATASIZE
#define  HUGEINTEGER_INNERDATASIZE  40
#endif

class HugeInteger {

   enum  { eMaxSize  = HUGEINTEGER_INNERDATASIZE };

   int m_data[eMaxSize]; 
};
//  вероятно :
#undef HUGEINTEGER_INNERDATASIZE





Использование енума приносит ряд преимуществ, 
1.  зависимость от дефайна в одном месте, в остальном используется сам енум
2.  удобство имени / отсутствие проблем с "внешними " именами
3.  независимость от значения дефайна.. т.е например дефайн использует длину в байтах,
а в реализации Вам удобнее мерять интегерами, тогда 
Код

enum { eMaxSize = ...SIZE / sizeof(int) }; 

4. действие дефайна становится локальным (при использовании #undef)

 и еще множество мелочей о которых сразу и не вспомнить smile

Это сообщение отредактировал(а) mes - 8.10.2010, 20:54


--------------------
PM MAIL WWW   Вверх
FlySabaka
Дата 8.10.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.9.2010
Где: г.Новосибирск

Репутация: нет
Всего: нет



mes, признаться честно преимущество на данный момент мне всё равно не ясно (и где-то там, в подсознании быть может, предложенная идея кажется полезной). Про коллизии, define и длинные имена это я понял. В любом случае, совету опытных я последую.

FIX: mes, вот теперь более понятны преимущества, спасибо за доходчивый ответ smile

P.S. Первоначально я вообще хотел использовать динамические массивы, ибо меня напрягают искусственные ограничения на длину числа. Но вот посмотрел я, что на просторах интернета realloc ругают, и хают, и отказался от этой идеи (имеется в виду применение realloc в c++). Не представляю как грамотно "удлинить"/"укоротить" число (читай массив), не используя realloc (есть конечно вариант с введением временной переменной нужного размера, и копирования первого массива с последующий дозаписью новых цифр, но некрасиво ведь по-моему)

Это сообщение отредактировал(а) FlySabaka - 8.10.2010, 18:17
PM MAIL   Вверх
mes
Дата 8.10.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(FlySabaka @  8.10.2010,  17:13 Найти цитируемый пост)
 Первоначально я вообще хотел использовать динамические массивы, ибо меня напрягают искусственные ограничения на длину числа. 


http://cplusplus.com/reference/stl/vector/


--------------------
PM MAIL WWW   Вверх
FlySabaka
Дата 8.10.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 24.9.2010
Где: г.Новосибирск

Репутация: нет
Всего: нет



mes, да-да, это я видел. может быть создам HugeInteger v.2. с использованием vector. В любом случае и такая реализация - неплохая практика для начинающего изучение C++. Тут не цель главное, а процесс smile
PM MAIL   Вверх
mes
Дата 8.10.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(FlySabaka @  8.10.2010,  17:13 Найти цитируемый пост)
признаться честно преимущество на данный момент мне всё равно не ясно


ну вот навскидку ситуация, которая при невнимании к варнингам,  может одарить долгими часами  дебага
Код

// huge.h
#define NUMBER 40

//number.h
#undef  NUMBER  // так даже предупреждения не будет .. 
#define NUMBER 20

//huge.cpp
#include "huge.h"
#include "number.h"

smile

Это сообщение отредактировал(а) mes - 8.10.2010, 18:44


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1058 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.