Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2013, 17:38   #1
Sergius X
Пользователь
 
Регистрация: 21.04.2009
Сообщений: 50
По умолчанию массивы как поле класса

Подскажите, как мне сделать динамический массив как поле класса? На подобии вот этой конструкции:
Код:
class TMyClass
{
private:
     int FX;
     int GetX() {return FX;};
     void SetX(int newX) {if(newX != FX) {FX = newX;}};
public:
     __property int X = {read=GetX, write=SetX};
     TMyClass()
     {
             FX = 0;
     }
     ~TMyClass()
     {
             FX = 0;
     }
};
Моя попытка:
Код:
typedef int *intD;

class TMy
{
private:
     intD FA;
     void SetA(intD newA){if(newA != FA){FA = newA;}};
     intD GetA(){return FA;};
public:
     __property intD A = {read=GetA, write=SetA};
     TMy()
     {
        intD *FA = new intD[1];
        for(int i=0; i<1; i++)
        {
                FA[i]=0;
        }
     }
     ~TMy()
     {
        delete [] FA;
     }
     void RazmerA(int n);
};
То есть под полем должен подразумеваться массив и с этим полем надо как то срабатывать потом. Допустим,
Код:
// предположим, что размерности обоих массивов одинаковые
int a[5];
A = a;
Как то так
$ergius
Sergius X вне форума Ответить с цитированием
Старый 29.07.2013, 19:31   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://www.cplusplus.com/reference/v...vector/vector/
_Bers вне форума Ответить с цитированием
Старый 29.07.2013, 21:31   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

При чем здесь вектор. Это уже из STL, а человеку, вилимо, нужно собственную реализацию.
Насколько я понял автор имел в виду вот это:
class UserClassName
{
private:
int *pArray;
public:
UserClassName(int _arraySize)
{
pArray = new int(_arraySize);
}
~UserClassName(int _arraySize)
{
delete pArray;
pArray = NULL;
}
};
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 21:44   #4
Sergius X
Пользователь
 
Регистрация: 21.04.2009
Сообщений: 50
По умолчанию

да да, мне нужна собственная реализация.
Цитата:
class UserClassName
{
private:
int *pArray;
public:
UserClassName(int _arraySize)
{
pArray = new int(_arraySize);
}
~UserClassName(int _arraySize)
{
delete pArray;
pArray = NULL;
}
};
Ну здесь только вместо поля указатель, конструктор и деструктор. А как же методы доступа к полю (Get и Set) и метод существования поля (__property)?
$ergius
Sergius X вне форума Ответить с цитированием
Старый 29.07.2013, 21:46   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
При чем здесь вектор. Это уже из STL, а человеку, вилимо, нужно собственную реализацию.
Человеку нужна возможность использовать "нечто" в качестве динамического массива в качестве мембера класса.

На языке с++ для этих целей используют контейнеры.
_Bers вне форума Ответить с цитированием
Старый 29.07.2013, 21:50   #6
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Человеку нужна возможность использовать "нечто" в качестве динамического массива в качестве мембера класса.

На языке с++ для этих целей используют контейнеры.
Да, я понимаю, и Вы абсолютно правы. Просто автор хотел собственную реализацию.
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 21:50   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Человеку нужна возможность использовать "нечто" в качестве динамического массива в качестве мембера класса.

На языке с++ для этих целей используют контейнеры.
Да, я понимаю, и Вы абсолютно правы. Просто автор хотел собственную реализацию.
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 21:51   #8
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Sergius X Посмотреть сообщение
да да, мне нужна собственная реализация.


Ну здесь только вместо поля указатель, конструктор и деструктор. А как же методы доступа к полю (Get и Set) и метод существования поля (__property)?
http://msdn.microsoft.com/en-us/library/yhfk0thd.aspx

Код:
__declspec(property(get=get_func_name)) declarator 
__declspec(property(put=put_func_name)) declarator 
__declspec(property(get=get_func_name, put=put_func_name)) declarator
Функции get и Set должны быть разрешены для их использования... если в private то будут ошибки компила
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 29.07.2013, 21:55   #9
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от Sergius X Посмотреть сообщение
да да, мне нужна собственная реализация.


Ну здесь только вместо поля указатель, конструктор и деструктор. А как же методы доступа к полю (Get и Set) и метод существования поля (__property)?
Код:
const int* getArrayAddress()
{
return pArray; // возврат адреса
}
void setArrayElement(int _arrayElement, int _position)
{
// если значение переменной _position не выходит
// за пределы массива
pArray[_position] = _arrayElement;
}
// и т.д в таком стиле.
__property уже сами добавите.
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 22:05   #10
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Sergius X,

Код:
class CClass {
  private:
    int array[9];
  public:
    getItemAt(const int id) { return array[id]; }
    setItemAt(const int id, const int value) { array[id] = value; }
    __declspec(property(get=getItemAt, put=setItemAt)) int Item[const int id];
};
как то так... но я хз как на bcb
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать метод класса, возвращающий объекты (поля класса) разных типов frosich Общие вопросы Delphi 3 01.03.2013 19:29
Как из простого мемо записать в поле БД Access в поле тоже типа мемо с сохранением всех абзацев пробелов Speeker БД в Delphi 2 28.11.2011 16:22
Ошибка при реализации метода класса, имеющего поле шаблоннного типа. DKOI Общие вопросы C/C++ 5 19.10.2010 19:10
объекты класса и динамические массивы alex_alpha Общие вопросы C/C++ 14 11.06.2010 01:32
Static поле класса GenAcid Общие вопросы Delphi 2 17.06.2008 11:55