С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Как использовать функцию класса в другом классе (ни один из классов не наследует другой)? - C++

12.08.2008, 01:43. Просмотров 4095. Ответов 14
Метки нет (Все метки)

функция в классе в котором она прописана объявлена как паблик.
C++
1
2
3
4
5
6
7
8
9
void auction::rvectoroldtime(int oldtime1, double low, double high )
{
    vectoroldtime=(double *)calloc(oldtime*4, sizeof(double));
    for(int i=0; i<4*oldtime; i++)
    {
        vectoroldtime[i]=neyro::frand(double low, double high);
    }
    return;
}
вот такой код не компилица.
C++
1
2
3
4
5
6
7
8
9
void auction::rvectoroldtime(int oldtime1, double low, double high )
{
    vectoroldtime=(double *)calloc(oldtime*4, sizeof(double));
    for(int i=0; i<4*oldtime; i++)
    {
        vectoroldtime[i]=frand(double low, double high);
    }
    return;
}
такой тоже.
нужно использовать функцию neyro::frand(double low, double high) в классе auction

вот сама функция
C++
1
2
3
4
5
6
7
8
double neyro::frand(double low, double high)
{
    double intrand;
    int i=rand()%30000;
    intrand=low+(double)i/10000*(high-low);
    //cout <<i <<"  "<<intrand<<"  "<< (double)i/10000<<"\n";
    return intrand;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2008, 01:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как использовать функцию класса в другом классе (ни один из классов не наследует другой)? (C++):

Указатель на функцию-член одного класса в другом классе - C++ - C++
Добрый вечер! Может кто-то может помочь с проблемой. class Cook { public: void _cook_dish(Dish cook_dish_id) { ... ...

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

Как сделать компоненты базового класса доступными в производном классе, но недоступными вне классов? - C++
Как сделать компоненты базового класса доступными в производном классе, но недоступными вне классов?

Объект класса в другом классе - C++
Здравствуйте! Недавно начал учить классы, прошу помогите мне. Мой написанный код не работает. Можете сказать, что с ним не так? ...

Создание класса в другом классе - C++
Приветствую всех. Уважаемые гуру, скажите можно ли создавать класс в теле друго класса? Причем создание &quot;внутреннего&quot; класса идет на...

Вызвать метод класса в другом классе - C++
Подскажите как мне вызвать метод класса в другом классе ?

14
XuTPbIu_MuHTAu
Эксперт С++
2228 / 743 / 10
Регистрация: 27.05.2008
Сообщений: 1,498
12.08.2008, 01:56 #2
Не понял смысла объявлять функцию frand в классе neyro.Она не использует этот класс. Можно объявить ее глобально или объявить ее и в классe auction
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
12.08.2008, 02:00 #3
имхо надо обьявлять ее как статик, хотя незнаю что это даст, но тогда ее можно будет вызывать
0
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
12.08.2008, 02:00  [ТС] #4
не она использует этот класс а оба класса используют её.
допустим я обявлю её глобально а если бы я не захотел этого делать? в более сложном случае?
на будущее.
0
XuTPbIu_MuHTAu
Эксперт С++
2228 / 743 / 10
Регистрация: 27.05.2008
Сообщений: 1,498
12.08.2008, 02:04 #5
Имеет смысл объявлять функцию как член класса,если функция работает с классом. Не вижу логики в этом объявлении.Объяви ее до объявления классов обычной глобальной функцией.В чем проблема? Зачем в теле класса?
1
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
12.08.2008, 02:06 #6
или наследовать класс как вариант

Добавлено через 30 секунд
или вынести в отдельный хедир и инклудить када надо
0
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
12.08.2008, 02:07  [ТС] #7

Использование в ваших программах методов класса
По мере создания методов класса возможны ситуации, когда функция, созданная вами для использования классом, может быть полезна для операций вашей программы, которые не включают объекты класса. Например, в классе menu была определена функция clear_screen, которую вы, возможно, захотите использовать в программе. Если ваш класс содержит метод, который вы захотите использовать вне объекта класса, поставьте перед его прототипом ключевое слово static и объявите этот метод как public:
public:
static void clear_screen(void);
Внутри вашей программы для вызова такой функции используйте оператор глобального разрешения, как показано ниже:
menu::clear_screen();
0
XuTPbIu_MuHTAu
Эксперт С++
2228 / 743 / 10
Регистрация: 27.05.2008
Сообщений: 1,498
12.08.2008, 02:08 #8
Цитата Сообщение от Spo1ler Посмотреть сообщение
или наследовать класс как вариант
Да не вариант! Логики нет!Зачем? Вызов функции -члена класса вообще отдельная штука,ей в качестве параметра передается указатель на объект класса,который вызывает ее. Не нужно это! функция - чисто математическая и к нейрону никакого отношения не имеет. Вынести отдельно и все.
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
12.08.2008, 02:22 #9
ну раз ему так надо, то пусть делает. самое логичное - наследовать класс
0
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
12.08.2008, 02:24  [ТС] #10
действительно обявить глобальной оказалось лучше
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
12.08.2008, 02:25 #11
1)и вообще, легче и впрямь сделать хедир с маленькими встраиваемыми функциями
2) вообще то, для инициализации rand надо делать srand(time(NULL));
3) код нелогичен, зачем использовать лишнюю переменную, можно писать (rand()%x) прямо в выражении
ЗЫ глобальные это в отдельном хедире?
0
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
12.08.2008, 02:33  [ТС] #12
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Да не вариант! Логики нет!Зачем? Вызов функции -члена класса вообще отдельная штука,ей в качестве параметра передается указатель на объект класса,который вызывает ее. Не нужно это! функция - чисто математическая и к нейрону никакого отношения не имеет. Вынести отдельно и все.
да это точно. это генератор случайных чисел.
я уже обявил её глобальной в данном случае таклучше оказалось.
но и за информацию об указателе static спасибо)))

Добавлено через 6 минут
Цитата Сообщение от Spo1ler Посмотреть сообщение
1)и вообще, легче и впрямь сделать хедир с маленькими встраиваемыми функциями
2) вообще то, для инициализации rand надо делать srand(time(NULL));
3) код нелогичен, зачем использовать лишнюю переменную, можно писать (rand()%x) прямо в выражении
ЗЫ глобальные это в отдельном хедире?
1) как кому нравиться. я просто не умею эти хедиры подключать

2)а без инициализации что происходит?
где эти строки писать?srand(time(NULL));

3) код логичен. это сейчас мне нужно равномерно распределнное число, а завтра может понадобиться экспоненциально распределёённое число. что ж мне весь код переписывать?
а так изменил функцию и готово
0
urkovsky
6 / 6 / 0
Регистрация: 07.08.2008
Сообщений: 22
12.08.2008, 08:55 #13
я просто не умею эти хедиры подключать
Надо учиться, очень удобно бывает

А вообще, я бы написал статический хелпер
0
Beliy_shum
1 / 1 / 0
Регистрация: 10.08.2008
Сообщений: 65
12.08.2008, 10:31  [ТС] #14
ну такнаучити!
а что такое динамический хелпер?
0
urkovsky
6 / 6 / 0
Регистрация: 07.08.2008
Сообщений: 22
12.08.2008, 10:56 #15
динамический хелпер пустое понятие. хелпер не имеет собственного состояния, он лишь реализует некий функционал. в твоем случае я бы сделал следующим макаром.

neyro.h - сигнатура
C++
1
2
3
4
5
6
class Neyro
{
 public: double frand(double low, double high);
};
 
static const Neyro NeyroInstance; // экземпляр
neyro.cpp - реализация
C++
1
2
3
4
5
6
7
8
double neyro::frand(double low, double high)
{
    double intrand;
    int i=rand()%30000;
    intrand=low+(double)i/10000*(high-low);
    //cout <<i <<"  "<<intrand<<"  "<< (double)i/10000<<"\n";
    return intrand;
}
test.cpp - использование
C++
1
2
3
4
5
6
#include "neyro.h"
 
void test()
{
  NeyroInstance.frand(a,b);
}
0
12.08.2008, 10:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2008, 10:56
Привет! Вот еще темы с ответами:

Использование объектов класса в другом классе - C++
Пусть имеются 2 класса Snake и Food, а также 2 их объекта snake и food соответственно. food должен в одном из его методов работать со...

Массив элементов класса в другом классе - C++
Есть класс &quot;студент&quot; и &quot;группа&quot;. В группе есть массив студентов. Как из main использовать методы класса студент, через класс группа?...

Создание объекта класса в другом классе!!! - C++
//----------------------------------Address.h---------------------------------------------------- class Address { public: const...

Получение данных от одного класса в другом классе. - C++
Здравствуйте уважаемые программисты. ситуация следующая: Есть класс А. У этого класса есть public функция getVar(), которая возвращает...


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

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

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