С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/12: Рейтинг темы: голосов - 12, средняя оценка - 5.00
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65

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

15.08.2008, 04:15. Показов 2574. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть проблемы:
есть класс 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];
        
    }
типа а как на самом деле это можно сделать? плиз поможите. сами мы не местные.... на вокзале не хватает нам разместится.

заранен спасибо)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2008, 04:15
Ответы с готовыми решениями:

указатели на элементы класса
Здравствуйте! есть код: class A { public: void C(void){return;} static int D(void){return 0;} int a;

Указатели на объекты класса
Здравствуйте. помогите новичку. есть проблема с освоением программирования на VC++. пытаюсь скомпилировать вот этот пример из книги: ...

Указатели на члены класса
Здравствуйте, В коде при вызове функции print() из CL2 вызывается print() из CL1. Подскажите, где грабли. Заранее спасибо. ...

11
134 / 47 / 11
Регистрация: 27.05.2008
Сообщений: 246
15.08.2008, 05:28
Т.е. суть вопроса в чем? Есть 2 массива (элементы класса auction - один с элементами double, а другой - neuro), и надо сделать не поэлементное присвоение, а перекинуть куском?

Выложи, пожалуйста, описание классов... и где это присвоение (последний кусок кода) происходит? Это метод класса auction должен быть, или как?
1
7 / 7 / 0
Регистрация: 07.08.2008
Сообщений: 22
15.08.2008, 09:24
Цитата Сообщение от 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).
0
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
15.08.2008, 12:44  [ТС]
Цитата Сообщение от Просто_Юлия Посмотреть сообщение
Т.е. суть вопроса в чем? Есть 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 - это массивы одного типа
0
 Аватар для Spo1ler
296 / 56 / 5
Регистрация: 22.05.2008
Сообщений: 788
15.08.2008, 17:48
походу memcpy() копирует память
0
134 / 47 / 11
Регистрация: 27.05.2008
Сообщений: 246
16.08.2008, 03:55
Я, видимо, блондинко.
Перечитала еще раз - так ничего и не поняла (что нужно сделать).
Вот, чего-то набросала...
Копирует.
А то ли и туда ли, что требовалось топикстартеру - не знаю.
У меня получилось, что все из 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];
        }
    };
1
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
16.08.2008, 14:52  [ТС]
да нет похоже я блондико(((((((((((((((((((((((((((((((( ((((
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?
0
134 / 47 / 11
Регистрация: 27.05.2008
Сообщений: 246
16.08.2008, 15:01
ой, я не люблю, когда все в кучу валят... и 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 нужен?
0
21 / 20 / 0
Регистрация: 04.08.2008
Сообщений: 31
16.08.2008, 15:03
Бегло посмотрел, на твой второй код, возникли подозрения, что не хватает деструктора. Там если мне не изм. память надо delete использовать, я конешн в классах не очень разбираюсь, но попробую в книжку посмотреть, откомпилить, и отписаться...
0
134 / 47 / 11
Регистрация: 27.05.2008
Сообщений: 246
16.08.2008, 15:09
Не, ну понятно, что память после использования надо освобождать.
Просто сейчас речь о другом...
0
 Аватар для Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
16.08.2008, 15:33  [ТС]
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;
}
вот я не могу понять в чём разница между этими двумя программами????????????????
0
134 / 47 / 11
Регистрация: 27.05.2008
Сообщений: 246
18.08.2008, 01:49
Я "inputs = new double[4];" написала для примера...
Можно этот массив инициализировать любым другим способом. Я же не ясновидящая, чтобы знать, откуда берется его размерность...
Для теста мне 4 хватило.
В объекте класса neuro хранится указатель на массив, поэтому размер массива на размер объекта никак не влияет.

Пример наглядный... ты оставляешь подруге записку: "Подарок для тебя лежит в спальне". Размер записки зависит от того, колечко там или стиральная машинка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2008, 01:49
Помогаю со студенческими работами здесь

Указатели на метод класса
Допустим есть 2 класса: class A { public: A() {} ~A() {} virtual void Draw(GLuint shader)

Указатели на методы класса
Как вот это откомпилить в C++ Builder WindowClass.lpfnWndProc = &amp;CMainWindow::OnEvent; при попытке компиляции имеем ошибку: ...

Указатели внутри класса и их удаление
Добрый день всем! В классе в качестве приватных переменных присутствуют несколько указателей. Появился закономерный вопрос: нужно ли...

Конструкторы и указатели на объект класса
Добрый вечер. Помогите, пожалуйста, прояснить 2 вещи: 1) В чём будет отличие между конструкторами: int a; //Исп. оператор...

Указатели на статические поля класса C++
Необходимо создать класс в public поле которого необходимо создать указатели на все элементы данного класса, при попытке получить адрес...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru