Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445
1

Как правильно создать массив объектов текущего класса в методе данного класса?

30.04.2015, 11:08. Просмотров 874. Ответов 2
Метки нет (Все метки)


Привет!

Ставится задача создания метода, который формирует массив объектов. Правильно ли делать этот метод внутри класса, экземпляром которого должны быть эти элементы массива?

Есть класс (инициализация):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Department{
 
  private:
 
    // код цеха
    int code;
 
    // имя цеха
    UnicodeString name;
 
    // нижние 2 наверное нафиг
    TADOQuery * query;
 
    // кол-во записей в таблице
    int rowsCount;
 
    // DataSource
    TDataSource * source;
 
    // Лукап комбобокс
    TDBLookupComboBox * lookup;
 
    // заголовок
    TLabel * label;
 
  public:
 
    // геттер
    UnicodeString getName();
 
    // сеттер кол-ва записей отделов
    void setRowsCount();
 
    // геттер числа строк
    int getRowsCount();
 
    // получить все отделы
    Department * getAll();
 
    // получить единственный элемент
    void Department::getItem();
 
    // получить массив отделов с помощью стека
    void Department::getAllStack();
 
    // получить свойства для данного отдела
    void Department::getProperties();
 
    Department();
};

Определение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Конструктор первого создания
Department::Department(){
  this->setRowsCount();
}
 
UnicodeString Department::getName(){
  return this->name;
}
 
// кол-во записей отделов
void Department::setRowsCount(){
  TADOQuery * sql = new TADOQuery(DataModule1);
  sql->Connection = DataModule1->DB;
  sql->SQL->Text = "SELECT COUNT(*) AS count FROM t_division WHERE LEVEL = 3";
        sql->Open();
  int count = sql->FieldByName("count")->AsInteger;
  this->rowsCount = count;
}
 
// кол-во записей отделов
int Department::getRowsCount(){
    return this->rowsCount;
}
 
// перебираем все отделы
Department * Department::getAll(){
 
  Department * depArray = new Department [this->rowsCount];
  DataModule1->departmentTab->First();
  int c = 0;
 
  while(!DataModule1->departmentTab->Eof){
 
    Department * depModel = new Department();
    depModel->code = DataModule1->departmentTab->FieldByName("CODE")->AsInteger;
    depModel->name = DataModule1->departmentTab->FieldByName("NAME")->AsAnsiString;
    depArray[c] =  * depModel;
    DataModule1->departmentTab->Next();
    c++;
  }
  return depArray;
}

Очень интересует вот это место:

C++
1
2
3
4
5
6
7
8
9
while(!DataModule1->departmentTab->Eof){
 
    <b>Department * depModel = new Department();
    depModel->code = DataModule1->departmentTab->FieldByName("CODE")->AsInteger;
    depModel->name = DataModule1->departmentTab->FieldByName("NAME")->AsAnsiString;
    depArray[c] =  * depModel;
    DataModule1->departmentTab->Next();
    c++;</b>
}

Создание такого массива объектов класса текущего класса вводит в заблуждение. При этом конструктор отрабатывается уйму раз. Но данный метод getRowsCount, лежит для того, чтобы не вызывать его каждый раз при создании объекта, ведь мне нужен count для цикла for, чтобы этот массив перебирать.

Типа того:

C++
1
2
3
4
5
Department * department = new Department();
  Department * depArray  =   department->getAll();
  for(int i = 0; i < department->getRowsCount(); i++){
     testArrayMemo->Lines->Add(depArray[i].getName());
  }

В каком месте правильнее этот массив собирать? В общем оно даже работало и собиралось, пока я не определил конструктор.

Как правильно организовать данную вещь. На с++ раньше не кодил. Вижу что тут что-то не так. Что приходит на ум - наследование либо второй конструктор без параметров. Посоветуйте как правильно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2015, 11:08
Ответы с готовыми решениями:

Создать массив объектов данного класса (задача и наброски кода внутри)
Текст задачи: 2. Напишите программу, в которой объявляется делегат для методов с символьным...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив...

Массив объектов класса как член другого класса
Здравствуйте. У меня тут возникла проблемка #include &quot;main.h&quot; class player { public: ...

Как можно еще создать массив объектов класса
допустим у меня есть основной класс и куча классов что наследуют его. помню видео в котором...

2
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
30.04.2015, 13:21 2
Цитата Сообщение от EVOSandru6 Посмотреть сообщение
Создание такого массива объектов класса текущего класса вводит в заблуждение.
По хорошему вам следует создать еще один уровень абстракции - класс, управляющий вот этим вот вашим. И в нем уже создать указатель на массив департаментов. Этот класс же и будет следить за очисткой памяти потом.
1
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445
30.04.2015, 18:46  [ТС] 3
Благодарю, буду искать как это делается. Трудно мне пока с указателями после веба.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2015, 18:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как создать статический двумерный массив объектов одного класса?
Есть определенное множество объектов типа tile^. Нужно их положить в двумерный массив с...

Как создать массив объектов одного класса в другом, и как к ним обращаться?
вот класс: #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class File {...

Приём константных векторов класса, как аргументов в методе другого класса
Есть такой класс: class Order { private: int numberOrder; map &lt;string, int&gt; catalogDish;...

Как вызвать метод вложенного класса в методе родительского класса
Имеется родительский класс для прорисовки графики Jogj package objects; import...

Как в методе класса вызвать другой метод того же класса?
class mate { public: int AplusB(int A, int B) { return A+B; } int AplusBplusC(int A,...

Как вызвать метод класса в другом методе этого же класса?
&lt;? class load_files{ public function traverse_hierarchy($path) { // from...


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

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

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