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

Указатели и элементы класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Beliy_shum
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
15.08.2008, 04:15     Указатели и элементы класса #1
Суть проблемы:
есть класс neuro.
в нём есть элемент данных
C++
1
double *inputs; //[] входы
есть независимый от первого класс auction в нём есть элемент данных
C++
1
double *m_old_time;//матрица бывших состояний биржи [4][oldtime]
также в классе auction есть элемент данных который представляет из себя масив объектов класса neuro объявлен он так:
C++
1
neuro **nabor_net;//указатель на масив указателей на объекты сетей
я в конструкторе класса(auction) создаю объект соответственно инициализирую масив объектов класса neuro(вот как я это делаю -
C++
1
2
3
4
5
6
    nabor_net = (neuro **)calloc(units_count, sizeof(prob));//выделим память для всей биржи.
    
    for(int unit=0; unit<units_count; unit++ )//инициализируем объекты класса нейрон
    {
        nabor_net[unit] = new neuro(/*....*/);    
    }
).

далее собственно требуется у всех объектов nabor_net[unit] (которые являются одновременно объектами класса neuro, и одновременно элементами данных класса auction)
присвоить элементу данных(*inputs) класса neuro элемент даннх(*m_old_time) класса auction

замечу что размерность обоих массивов одинаковая

на это у меня фантазии не хватает. вот как я пытаюсь это сделать:
C++
1
2
3
4
5
for(int i=0; i<old_time*4; i++)//передадим на каждый нейрон входной сигнал(матрицу m_old_time)
    {
        *neuro::inputs[i] = *auction::m_old_time[i];
        
    }
типа а как на самом деле это можно сделать? плиз поможите. сами мы не местные.... на вокзале не хватает нам разместится.

заранен спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Просто_Юлия
133 / 45 / 2
Регистрация: 27.05.2008
Сообщений: 245
15.08.2008, 05:28     Указатели и элементы класса #2
Т.е. суть вопроса в чем? Есть 2 массива (элементы класса auction - один с элементами double, а другой - neuro), и надо сделать не поэлементное присвоение, а перекинуть куском?

Выложи, пожалуйста, описание классов... и где это присвоение (последний кусок кода) происходит? Это метод класса auction должен быть, или как?
urkovsky
6 / 6 / 0
Регистрация: 07.08.2008
Сообщений: 22
15.08.2008, 09:24     Указатели и элементы класса #3
Цитата Сообщение от Beliy_shum Посмотреть сообщение
nabor_net = (neuro **)calloc(units_count, sizeof(prob));
Что такое prob? По сути здесь должен быть sizeof(neyro*)

Теперь по сути. Используй memcpy(neyro::inputs, auction::m_old_time, sizeof(double) * old_time * 4).
Beliy_shum
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
15.08.2008, 12:44  [ТС]     Указатели и элементы класса #4
Цитата Сообщение от Просто_Юлия Посмотреть сообщение
Т.е. суть вопроса в чем? Есть 2 массива (элементы класса auction - один с элементами double, а другой - neuro), и надо сделать не поэлементное присвоение, а перекинуть куском?

Выложи, пожалуйста, описание классов... и где это присвоение (последний кусок кода) происходит? Это метод класса auction должен быть, или как?
ООО ты сечёшь фишку)))) Это метод класса auction)))
классы я не выложу ибо пока вся моя программа это и есть описание этих двух классов. там 800 строк кода.


нужно хоть куском хоть по элементно (лишь бы работало) перкинуть масив из класаа auction во все объекты класса neuro (которые(эти объекты) тоже являються элементом данных класса auction)

Добавлено через 3 минуты 33 секунды
Цитата Сообщение от urkovsky Посмотреть сообщение
Что такое prob? По сути здесь должен быть sizeof(neyro*)

Теперь по сути. Используй memcpy(neyro::inputs, auction::m_old_time, sizeof(double) * old_time * 4).
это уже созданный обект типа neyro* ))))

а можешь по подробнее расказать про эту функцию)
вроде бы она память выделяеет... но у меня вся нужна я память уже выделена!!!!
мне не нужно память по новой выделять мне нужно в neyro::inputs запихать auction::m_old_time - это массивы одного типа
Spo1ler
 Аватар для Spo1ler
291 / 51 / 3
Регистрация: 22.05.2008
Сообщений: 788
15.08.2008, 17:48     Указатели и элементы класса #5
походу memcpy() копирует память
Просто_Юлия
133 / 45 / 2
Регистрация: 27.05.2008
Сообщений: 245
16.08.2008, 03:55     Указатели и элементы класса #6
Я, видимо, блондинко.
Перечитала еще раз - так ничего и не поняла (что нужно сделать).
Вот, чего-то набросала...
Копирует.
А то ли и туда ли, что требовалось топикстартеру - не знаю.
У меня получилось, что все из m_old_time достается массиву inputs первого элемента массива nabor_net... у остальных инпутсы не заполнены.

Если нет - пишите, что надо...
Часть инициализаций, очевидно, по идее происходит в других местах - но мне для обеспечения работоспособности этого отрывка пришлось их запихнуть.
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
class neuro {
  public:
    double *inputs;
    neuro(){
        inputs = new double[4];
        };
  };
//----------------------------------------------------------------------------
class auction {
  public:
    double *m_old_time;
    neuro *nabor_net;
 
    auction(){
        int units_count=5;
        nabor_net = new neuro[units_count];
        for(int unit=0; unit<units_count; unit++ )
            nabor_net[unit] = neuro();
        }
 
    void change() {
        int old_time = 1;
        m_old_time = new double[old_time*4];
        for(int i=0; i<old_time*4; i++)
            m_old_time[i]=i;
        for(int i=0; i<old_time*4; i++)
            nabor_net[0].inputs[i] = m_old_time[i];
        }
    };
Beliy_shum
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
16.08.2008, 14:52  [ТС]     Указатели и элементы класса #7
да нет похоже я блондико((((((((((((((((((((((((((((((((((((
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
#include "stdafx.h"
class neuro {
  public:
    double *inputs;
    int inputs_count;
    neuro(int uc, double ii )
    {    
        inputs_count=uc;
        inputs = (double *)calloc(inputs_count, sizeof(double));
        for(int i=0; i<inputs_count ;i++)
            inputs[i]=ii;
        
        };
  };
//----------------------------------------------------------------------------
class auction {
  public:
    double *m_old_time;
    neuro *nabor_net;
 
    auction(){
        int neuro_count=5;
        nabor_net = (neuro *)calloc(neuro_count, sizeof(neuro));
        for(int unit=0; unit<neuro_count; unit++ )
            nabor_net[unit] = neuro(5,0.003);
        }
    };
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
я бы эту программу писал так -
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
#include "stdafx.h"
class neuro {
  public:
    double *inputs;
    int inputs_count;
    neuro(int uc, double ii )
    {    
        inputs_count=uc;
        inputs = (double *)calloc(inputs_count, sizeof(double));
        for(int i=0; i<inputs_count ;i++)
            inputs[i]=ii;
        
        };
  };
//----------------------------------------------------------------------------
class auction {
  public:
    double *m_old_time;
    neuro *nabor_net;
 
    auction(){
        int neuro_count=5;
        nabor_net = (neuro *)calloc(neuro_count, sizeof(neuro));
        for(int unit=0; unit<neuro_count; unit++ )
            nabor_net[unit] = [U][B][COLOR=Red]new[/COLOR][/B][/U] neuro(5,0.003);
        }
    };
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
обясните пожалуйста дураку почему первая программа компилируеться а вторая не компилируется?
что я во второй программе сделал опреатором new?
Просто_Юлия
133 / 45 / 2
Регистрация: 27.05.2008
Сообщений: 245
16.08.2008, 15:01     Указатели и элементы класса #8
ой, я не люблю, когда все в кучу валят... и calloc, и new...
Я написала, как мне нравится - вместо
C++
1
nabor_net = (neuro *)calloc(neuro_count, sizeof(neuro));
вот такое:
C++
1
nabor_net = new neuro[units_count];
Из хэлпа:
Arrays of classes with constructors are initialized with the default constructor.
Так что конструктор по умолчанию (без параметров) допиши... У меня он единственный, а у тебя его нету.

А здесь:
C++
1
nabor_net[unit] = neuro(5,0.003);
Идет инициализация с помощью конструктора, зачем еще и new нужен?
Счастливчик
19 / 18 / 0
Регистрация: 04.08.2008
Сообщений: 31
16.08.2008, 15:03     Указатели и элементы класса #9
Бегло посмотрел, на твой второй код, возникли подозрения, что не хватает деструктора. Там если мне не изм. память надо delete использовать, я конешн в классах не очень разбираюсь, но попробую в книжку посмотреть, откомпилить, и отписаться...
Просто_Юлия
133 / 45 / 2
Регистрация: 27.05.2008
Сообщений: 245
16.08.2008, 15:09     Указатели и элементы класса #10
Не, ну понятно, что память после использования надо освобождать.
Просто сейчас речь о другом...
Beliy_shum
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
16.08.2008, 15:33  [ТС]     Указатели и элементы класса #11
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
#include "stdafx.h"
class neuro {
  public:
    double *inputs;
    int inputs_count;
    neuro(int uc, double ii )
    {    
        inputs_count=uc;
        inputs = (double *)calloc(inputs_count, sizeof(double));
        for(int i=0; i<inputs_count ;i++)
            inputs[i]=ii;
        
        };
  };
//----------------------------------------------------------------------------
class auction {
  public:
    double *m_old_time;
    neuro *nabor_net;
 
    auction(){
        int neuro_count=5;
        nabor_net = (neuro *)calloc(neuro_count, sizeof(neuro));
        for(int unit=0; unit<neuro_count; unit++ )
            nabor_net[unit] = neuro(5,0.003);
        }
    };
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
вот в этой программе я выделяю под объкты типа нейро память определённого размера.
зачем мне конструктор без параметров ведь он не сможет выделить память под обекты нейро так как размер 1одного обектв нейро очень сильно зависито параметров(в тысячи раз)

у тебя в конструкторе без параметров
C++
1
2
3
        neuro(){
        inputs = new double[4];
        };
ты выделяешь фиксированное количество памяти. для 4 чисел.

а что будет если тебе потом туда понадобится запихать обект нейро у которого должнобыть 100000 чисел?
по этому я выделяю память для обектов нейро исходя из того кокой обект какого размера мне нужно создать.
я делаю это каллоком.

а вот зачем
C++
1
nabor_net[unit] = new neuro(5,0.003);
я так делаю понять вообще не могу. раньше работало. но только если
C++
1
neuro **nabor_net;
Добавлено через 6 минут 17 секунд
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "stdafx.h"
class neuro {
  public:
    double *inputs;
    int inputs_count;
    neuro(int uc, double ii )
    {    
        inputs_count=uc;
        inputs = (double *)calloc(inputs_count, sizeof(double));
        for(int i=0; i<inputs_count ;i++)
            inputs[i]=ii;
        
        };
  };
//----------------------------------------------------------------------------
class auction {
  public:
    double *m_old_time;
    neuro **nabor_net;
 
    auction(){
        int neuro_count=5;
        nabor_net = (neuro **)calloc(neuro_count, sizeof(neuro));
        for(int unit=0; unit<neuro_count; unit++ )
            nabor_net[unit] = new neuro(5,0.003);
        }
 
 
    };
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}[/CODE]
 
вот так тоже работает!!!!!!!!!!!!! я раньше делал так!!!!!!!
 
а ты мне так советуешь(так работает):
[CODE]#include "stdafx.h"
class neuro {
  public:
    double *inputs;
    int inputs_count;
    neuro(int uc, double ii )
    {    
        inputs_count=uc;
        inputs = (double *)calloc(inputs_count, sizeof(double));
        for(int i=0; i<inputs_count ;i++)
            inputs[i]=ii;
        
        };
  };
//----------------------------------------------------------------------------
class auction {
  public:
    double *m_old_time;
    neuro *nabor_net;
 
    auction(){
        int neuro_count=5;
        nabor_net = (neuro *)calloc(neuro_count, sizeof(neuro));
        for(int unit=0; unit<neuro_count; unit++ )
            nabor_net[unit] = neuro(5,0.003);
        }
    };
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
вот я не могу понять в чём разница между этими двумя программами????????????????
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2008, 01:49     Указатели и элементы класса
Еще ссылки по теме:

Не вводятся элементы в массив(указатели) C++
C++ Просуммировать элементы массива используя указатели
Указатели на члены класса C++
C++ Вывести на экран элементы массива используя указатели
C++ Поменять элементы массива местами используя указатели

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

Или воспользуйтесь поиском по форуму:
Просто_Юлия
133 / 45 / 2
Регистрация: 27.05.2008
Сообщений: 245
18.08.2008, 01:49     Указатели и элементы класса #12
Я "inputs = new double[4];" написала для примера...
Можно этот массив инициализировать любым другим способом. Я же не ясновидящая, чтобы знать, откуда берется его размерность...
Для теста мне 4 хватило.
В объекте класса neuro хранится указатель на массив, поэтому размер массива на размер объекта никак не влияет.

Пример наглядный... ты оставляешь подруге записку: "Подарок для тебя лежит в спальне". Размер записки зависит от того, колечко там или стиральная машинка?
Yandex
Объявления
18.08.2008, 01:49     Указатели и элементы класса
Ответ Создать тему
Опции темы

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