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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
#1

Как создавать массивы объектов, и как к ним обращаться? - C++

10.08.2008, 22:12. Просмотров 2803. Ответов 11
Метки нет (Все метки)

как создавать массивы объектов и как к ним обращаться?

вот что пишет создатель самого си в своей книге -
5.5.5 Массивы объектов класса
Чтобы можно было описать массив объектов класса с конструктором, этот класс должен иметь стандартный конструктор, т.е. конструктор, вызываемый без параметров. Например, в соответствии с определением
C++
1
 table tbl[10];
будет создан массив из 10 таблиц, каждая из которых инициализируется вызовом table::table(15), поскольку вызов table::table() будет происходить с фактическим параметром 15.
В описании массива объектов не предусмотрено возможности указать параметры для конструктора. Если члены массива обязательно надо инициализировать разными значениями, то начинаются трюки с глобальными или статическими членами. Когда уничтожается массив, деструктор должен вызываться для каждого элемента массива. Для массивов, которые размещаются не с помощью new, это делается неявно. Однако для размещенных в свободной памяти массивов неявно вызывать деструктор нельзя, поскольку транслятор не отличит указатель на отдельный объект массива от указателя на начало массива, например:
C++
1
2
3
4
5
6
7
8
void f()
{
 table* t1 = new table;
 table* t2 = new table[10];
 delete t1; // удаляется одна таблица
 delete t2; // неприятность:
 // на самом деле удаляется 10 таблиц
}
В данном случае программист должен указать, что t2 - указатель на массив:
C++
1
2
3
4
5
6
7
void g(int sz)
{
 table* t1 = new table;
 table* t2 = new table[sz];
 delete t1;
 delete[] t2;
}
Функция размещения хранит число элементов для каждого размещаемого массива. Требование использовать для удаления массивов только операцию delete[] освобождает функцию размещения от обязанности хранить счетчики
числа элементов для каждого массива. Исполнение такой обязанности в реализациях С++ вызывало бы существенные потери времени и памяти и нарушило совместимость с С.
получается что нельзя создавать массивы объектов если в классе не стандартный деструктор!!!!
а как обращаться к созданным объектам в массиве? мне не понятно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2008, 22:12     Как создавать массивы объектов, и как к ним обращаться?
Посмотрите здесь:

Как правильно обращаться к функциям C++
как создать вектор из векторов и как потом к нему обращаться? C++
C++ как создавать динамическое число объектов
Как узнать и прочитать файл до того как с ним начнет работать другая программа C++
C++ Как обращаться к элементам двумерного массива?
C++ Почему не стоит создавать массив объектов?
Как обращаться к Union C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
10.08.2008, 22:35     Как создавать массивы объектов, и как к ним обращаться? #2
вот так
(t[1]).f();
или нет?
лучше конечно наверное сделать массив указателей на обьекты, тогда (t[i])->f();
а деструкторы вроде бы лучше объявлять так
Код
virtual ~SomeClass(){

}
гуру поправьте меня если я не прав, сам в принципе новичок
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
10.08.2008, 22:51  [ТС]     Как создавать массивы объектов, и как к ним обращаться? #3
напиши пожалуйста пример я новичок в этом деле и мне сложно воспринимать так (без примеров)
напиши какойнибудь пример(в том числе с указателемя)
я пытался так:
C++
1
2
3
    neyro* t;
    t[1] = new neyro("0.txt");
    t[1]->saveset("00.txt");
не получается

Добавлено через 2 минуты
Код
 neyro* t[3];
    t[1] = new neyro("0.txt");
    t[1]->saveset("00.txt");
а так получилось))))))
объясните пожалуйста что я сделал?
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
10.08.2008, 23:32     Как создавать массивы объектов, и как к ним обращаться? #4
somep->somefunc() это тоже самое что (*p).somefunc()
так что вы использовли не то,если вам надо получить доступ к члену обьекта, то используте синтаксис someObj.somemember; -> же создан для указателей на функции и данныйе члены
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
10.08.2008, 23:37  [ТС]     Как создавать массивы объектов, и как к ним обращаться? #5
Цитата Сообщение от Spo1ler Посмотреть сообщение
somep->somefunc() это тоже самое что (*p).somefunc()
так что вы использовли не то,если вам надо получить доступ к члену обьекта, то используте синтаксис someObj.somemember; -> же создан для указателей на функции и данныйе члены
ммм если я не то использовал почему у меня получилось?
и синтаксис совсе не такой как уСтрауструпа
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
10.08.2008, 23:47     Как создавать массивы объектов, и как к ним обращаться? #6
эм, во общем можно мне брифинг? а то я запутался как там у вас получалось, а как нет
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
10.08.2008, 23:54  [ТС]     Как создавать массивы объектов, и как к ним обращаться? #7
я не знаю что такое брифинг(((((
C++
1
2
3
neyro* t[3];
    t[1] = new neyro("0.txt");
    t[1]->saveset("00.txt");
так получилось
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
10.08.2008, 23:58     Как создавать массивы объектов, и как к ним обращаться? #8
Насколько я понял,суть проблемы в инициализации отдельных элементов массива,собранного из объектов класса? То,что есть конструкторы,не значит,что инициализация возможна только ими. Напишите функцию для инициализации - и проблемы уже нет. Вообще,как я вижу себе конструкторы не-по-умолчанию, их область использования не очень велика. Имеет смысл их использовать в таких ситуациях :

скажем,есть класс,например, VECTOR3D. и есть функция,которая делает так:
float length(VECTOR3D & v); А у вас есть три числа : float x,float y,float z; Тогда напрашивается такой вызов : length( VECTOR3D(x,y,z)); Пример притянут за уши,но мысль ясна.
Вот пример работы с массивом объектов :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include < stdio.h>
#include <conio.h>
class someClass {
private : 
    int someNumber;
public:
    someClass() { someNumber=0;};
    void initNumber(int number) { someNumber=number;};
    void showNumber() { printf("%d",someNumber); };
};
int main () {
    someClass* someArray = new someClass[10];;
    for(int i=0;i<10;i++) someArray[i].showNumber();
    printf("\n");
    for(i=0;i<10;i++) someArray[i].initNumber(i);
    for( i=0;i<10;i++) someArray[i].showNumber();
    getch();
    return 0;
};
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
11.08.2008, 00:07  [ТС]     Как создавать массивы объектов, и как к ним обращаться? #9
спасибо за пример)))) всё становиться понятным
urkovsky
6 / 6 / 0
Регистрация: 07.08.2008
Сообщений: 22
13.08.2008, 15:22     Как создавать массивы объектов, и как к ним обращаться? #10
Чисто это, для прояснения ситуации
neyro * t - указатель на один объект
neyro * t[10] оно же neyro ** t - указатель на массив указателей
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
13.08.2008, 21:59     Как создавать массивы объектов, и как к ним обращаться? #11
указатель на первый элемент массива вообщето
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2008, 09:40     Как создавать массивы объектов, и как к ним обращаться?
Еще ссылки по теме:

Как обращаться к строке и столбцу матрицы с помощью указателя? C++
C++ Как получить доступ к элементам массива работая с ним как с указателем и адресной арифметикой
C++ Создание объектов класса и обращение к ним
C++ Как обращаться с функциями?
Как обращаться к методу динамически созданного объекта? C++

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

Или воспользуйтесь поиском по форуму:
urkovsky
6 / 6 / 0
Регистрация: 07.08.2008
Сообщений: 22
14.08.2008, 09:40     Как создавать массивы объектов, и как к ним обращаться? #12
Согласен, и это тоже
Yandex
Объявления
14.08.2008, 09:40     Как создавать массивы объектов, и как к ним обращаться?
Ответ Создать тему
Опции темы

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