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

внешние функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
27.01.2012, 23:27     внешние функции #1
Всем привет!

Сижу,туплю:
В задании написано: "тип данных является струкурой с необходимыми полями, а операции реализуются как внешние функции, которые получают объекты данного типа в качестве аргументов"

Так вот структура, например:
C++
1
2
3
4
5
struct Angle
{
    int degree;
    int minute;
};
Т.е. напр., внешняя функция инициализации будет так выглядеть:
C++
1
2
3
4
5
6
7
Angle Init(int d,int m)
{
    Angle angle;
    angle.degree=d;
    angle.minute=m;
    return angle;
}
Т.е я должен каждый раз создавать один и тот же объект angle? (первый вопрос)
И второй нубский вопрос: а как вызвать внешнюю функцию в main()?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
27.01.2012, 23:31     внешние функции #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
struct Angle
{
        int degree;
        int minute;
};
 
void Init(Angle& a, int deg, int min)
{
a.degree = deg;
a.minute = min;
 
};
 
 
int main()
 
{
Angle a;
Angle b;
 
Init(a,4,5); //вызовы внешней функции 
Init(b,11,3);//для разных объектов
 
 
return 0;
}
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
27.01.2012, 23:33  [ТС]     внешние функции #3
Извините, если Вам не смешно, у меня правильно хоть написана внешняя функция?
ШКІПЕР
 Аватар для ШКІПЕР
93 / 93 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
27.01.2012, 23:34     внешние функции #4
А мне кажется, что так:
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
#include <stdio.h>
#include <stdlib.h>
 
struct Angle
{
        int degree;
        int minute;
};
 
 
Angle Init(int d,int m)
{
        Angle angle;
        angle.degree=d;
        angle.minute=m;
        return angle;
}
 
int main()
{
    Angle a = Init (1, 2);
 
    return EXIT_SUCCESS;
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.01.2012, 23:37     внешние функции #5
ШКІПЕР, а временный объект-то зачем создавать?
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
27.01.2012, 23:38     внешние функции #6
C++
1
2
3
4
5
6
7
Angle Init(int d,int m)
{
        Angle angle;
        angle.degree=d;
        angle.minute=m;
        return angle;
}
в контексте твоего вопроса не совсем

а операции реализуются как внешние функции, которые получают объекты данного типа в качестве аргументов"
твоя функция создает внутри себя объект затем присваивает значения, затем это все должно быть скопировано в такой же объект и возвращено а объект из тела функции будет уничтожен.

задача вроде другая. не создавать, а именно оперировать с готовым объектом внешними функциями
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
27.01.2012, 23:39  [ТС]     внешние функции #7
ШКІПЕР, спасибо, а если я буду вызывать другие функции, то мне чтоли придется каждый раз содавать новый объект?
ШКІПЕР
 Аватар для ШКІПЕР
93 / 93 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
27.01.2012, 23:42     внешние функции #8
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
а если я буду вызывать другие функции, то мне чтоли придется каждый раз содавать новый объект?
Неудачный пример с этим Init. Если другие фунцкии, что будут изменять структуру - можна передавать адрес на нее, а не создавать заново. Все зависит от того, для чего нужна функция. (Или вопрос неправильно понял ?)
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
27.01.2012, 23:43  [ТС]     внешние функции #9
AzaKendler, т.е. я неправильно понял, надо было все-таки:
C++
1
2
3
4
5
6
void Init(Angle& a, int deg, int min)
{
a.degree = deg;
a.minute = min;
 
};
Хорошо, спасибо
ШКІПЕР
 Аватар для ШКІПЕР
93 / 93 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
27.01.2012, 23:43     внешние функции #10
Цитата Сообщение от soon Посмотреть сообщение
а временный объект-то зачем создавать?
Тогда лучше сделать так:
C++
1
Angle& a = Init (1, 2);
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
27.01.2012, 23:44     внешние функции #11
ой вей
си стайл таков
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BOOL angle_init (Angle* angle, int d, int m)
{
        if (!angle || d < 0 || m <0) return FALSE;
        angle->degree=d;
        angle->minute=m;
        return TRUE;
}
 
int main()
{
        Angle angle;
        angle_init (&angle, 2, 3);
        return 0;
}
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
27.01.2012, 23:52     внешние функции #12
Mr. Pyatachok, даже не думай делать так
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
C++
1
Angle& a = Init (1, 2);
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.01.2012, 23:55     внешние функции #13
ШКІПЕР, фиг с ним, что в Си(судя по хедерам) нет ссылочного типа. Но возвращать созданный в функции объект по ссылке - это круто.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.01.2012, 00:00     внешние функции #14
Цитата Сообщение от soon Посмотреть сообщение
Но возвращать созданный в функции объект по ссылке - это круто.
ну тут не совсем так
оно правда даже не компилируется
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.01.2012, 00:09     внешние функции #15
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну тут не совсем так
Поясните, пожалуйста. То, что "круто" - сарказм, я надеюсь, все поняли.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6167 / 2896 / 282
Регистрация: 04.12.2011
Сообщений: 7,703
Записей в блоге: 3
28.01.2012, 02:48     внешние функции #16
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
AzaKendler, т.е. я неправильно понял, надо было все-таки:

C++
1
2
3
4
5
void Init(Angle& a, int deg, int min)
{
a.degree = deg;
a.minute = min;
};
Думаю, это то, что требуется в задании.
А возвращать ссылки на локально созданные объекты это - не хорошо.
Кстати, кроме простой инициализации инициализация нулями - выполнение задачи в чистом виде, т.к. не требует других аргументов кроме ссылки на объект.
Пересчет в минуты, в радианы - функции принимающее один аргумент - объект.
Тип возвращаемого значения у всех, конечно void, т.к. вызывающая точка всегда знает какой экземпляр имеется ввиду, (она его передает функции).
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.01.2012, 11:33     внешние функции #17
soon, тут инициализация ссылки временным объектом
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.01.2012, 12:31     внешние функции #18
alex_x_x, это понятно, я имел в виду доведенный до компилируемого вида вариант, путем возвращения из функции ссылки на объект.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2012, 15:27     внешние функции
Еще ссылки по теме:

Объединять классы и внешние функции в одной программе плохой тон программирования? C++
Неразрешенные внешние символы/элементы C++
C++ Шаблоны: неразрешенные внешние элементы

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6167 / 2896 / 282
Регистрация: 04.12.2011
Сообщений: 7,703
Записей в блоге: 3
28.01.2012, 15:27     внешние функции #19
Цитата Сообщение от soon Посмотреть сообщение
alex_x_x, это понятно, я имел в виду доведенный до компилируемого вида вариант, путем возвращения из функции ссылки на объект.
Святое дело, если нужно. Например, передаем два и более объекта, сравниваем и возвращаем объект и т.п.
Как передать? Имена массивов, структур, объектов - указатели т.е. адресные выражения.
Реплика:
Цитата Сообщение от IGPIGP Посмотреть сообщение
А возвращать ссылки на локально созданные объекты это - не хорошо.
к примеру:

C++
1
2
3
4
5
void Init(Angle& a, int deg, int min)
{
a.degree = deg;
a.minute = min;
};
не относится, тут, вроде всё верно. Это относится к примерам, где объект создавался в функции и ею возвращался.
Мне показалось, что в задании ожидаются функции в которые ничего кроме объекта передавать не нужно, т.к. они связаны с объектом его внутренней логикой и сами знают, что делать
Например перевести в минуты, выдать десятичный градус, вернуть радианы (эти все уже не void) и т.п.
Т.е. делая, что-то полезное они используют только переданный объект и не позволяет вмешаться в него из-вне. Нечто вроде демонстрации совмещения инкапсуляции при использовании внешних функций, переход к курсу ООП и всё такое
Yandex
Объявления
28.01.2012, 15:27     внешние функции
Ответ Создать тему
Опции темы

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