Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/64: Рейтинг темы: голосов - 64, средняя оценка - 4.91
 Аватар для Mr. Pyatachok
8 / 9 / 1
Регистрация: 30.06.2011
Сообщений: 250

внешние функции

27.01.2012, 23:27. Показов 11947. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

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

Так вот структура, например:
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()?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2012, 23:27
Ответы с готовыми решениями:

Внешние функции в классе
del

Реализовать внешние функции для создания и уничтожения объектов класса
Здравствуйте, имеется вот такое задание: Создайте класс с закрытыми конструкторами и деструктором. Реализуйте внешние функции для...

Объединять классы и внешние функции в одной программе плохой тон программирования?
Доброго времени суток! Преподаватель в институте задал определённую задачу, однако не определил разрешённые возможности. Сказал только -...

18
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
27.01.2012, 23:31
наверно имелось ввиду следующее

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;
}
1
 Аватар для Mr. Pyatachok
8 / 9 / 1
Регистрация: 30.06.2011
Сообщений: 250
27.01.2012, 23:33  [ТС]
Извините, если Вам не смешно, у меня правильно хоть написана внешняя функция?
0
 Аватар для ШКІПЕР
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
27.01.2012, 23:34
А мне кажется, что так:
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;
}
1
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.01.2012, 23:37
ШКІПЕР, а временный объект-то зачем создавать?
0
 Аватар для AzaKendler
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
Записей в блоге: 15
27.01.2012, 23:38
C++
1
2
3
4
5
6
7
Angle Init(int d,int m)
{
        Angle angle;
        angle.degree=d;
        angle.minute=m;
        return angle;
}
в контексте твоего вопроса не совсем

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

задача вроде другая. не создавать, а именно оперировать с готовым объектом внешними функциями
1
 Аватар для Mr. Pyatachok
8 / 9 / 1
Регистрация: 30.06.2011
Сообщений: 250
27.01.2012, 23:39  [ТС]
ШКІПЕР, спасибо, а если я буду вызывать другие функции, то мне чтоли придется каждый раз содавать новый объект?
0
 Аватар для ШКІПЕР
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
27.01.2012, 23:42
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
а если я буду вызывать другие функции, то мне чтоли придется каждый раз содавать новый объект?
Неудачный пример с этим Init. Если другие фунцкии, что будут изменять структуру - можна передавать адрес на нее, а не создавать заново. Все зависит от того, для чего нужна функция. (Или вопрос неправильно понял ?)
1
 Аватар для Mr. Pyatachok
8 / 9 / 1
Регистрация: 30.06.2011
Сообщений: 250
27.01.2012, 23:43  [ТС]
AzaKendler, т.е. я неправильно понял, надо было все-таки:
C++
1
2
3
4
5
6
void Init(Angle& a, int deg, int min)
{
a.degree = deg;
a.minute = min;
 
};
Хорошо, спасибо
0
 Аватар для ШКІПЕР
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
27.01.2012, 23:43
Цитата Сообщение от soon Посмотреть сообщение
а временный объект-то зачем создавать?
Тогда лучше сделать так:
C++
1
Angle& a = Init (1, 2);
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.01.2012, 23:44
ой вей
си стайл таков
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;
}
1
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
27.01.2012, 23:52
Mr. Pyatachok, даже не думай делать так
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
C++
1
Angle& a = Init (1, 2);
1
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.01.2012, 23:55
ШКІПЕР, фиг с ним, что в Си(судя по хедерам) нет ссылочного типа. Но возвращать созданный в функции объект по ссылке - это круто.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
28.01.2012, 00:00
Цитата Сообщение от soon Посмотреть сообщение
Но возвращать созданный в функции объект по ссылке - это круто.
ну тут не совсем так
оно правда даже не компилируется
1
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.01.2012, 00:09
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну тут не совсем так
Поясните, пожалуйста. То, что "круто" - сарказм, я надеюсь, все поняли.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.01.2012, 02:48
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
AzaKendler, т.е. я неправильно понял, надо было все-таки:

C++
1
2
3
4
5
void Init(Angle& a, int deg, int min)
{
a.degree = deg;
a.minute = min;
};
Думаю, это то, что требуется в задании.
А возвращать ссылки на локально созданные объекты это - не хорошо.
Кстати, кроме простой инициализации инициализация нулями - выполнение задачи в чистом виде, т.к. не требует других аргументов кроме ссылки на объект.
Пересчет в минуты, в радианы - функции принимающее один аргумент - объект.
Тип возвращаемого значения у всех, конечно void, т.к. вызывающая точка всегда знает какой экземпляр имеется ввиду, (она его передает функции).
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
28.01.2012, 11:33
soon, тут инициализация ссылки временным объектом
1
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.01.2012, 12:31
alex_x_x, это понятно, я имел в виду доведенный до компилируемого вида вариант, путем возвращения из функции ссылки на объект.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.01.2012, 15:27
Цитата Сообщение от 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) и т.п.
Т.е. делая, что-то полезное они используют только переданный объект и не позволяет вмешаться в него из-вне. Нечто вроде демонстрации совмещения инкапсуляции при использовании внешних функций, переход к курсу ООП и всё такое
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2012, 15:27
Помогаю со студенческими работами здесь

Внешние объекты в классе
Если класс исплользует какую то внешнюю переменную (например hWnd), то как будет более корректно его создать: class MyClass { ...

Внутренние и внешние связи
int externalint=5; const int j=10; int main() { } В книге написано,что переменная externalint имеет внешнюю связь,а...

Подскажите про внешние зависимости
Всем привет. Никак не могу подключить к проекту внешние зависимости. Собираю консольное приложение в VS6. Прописываю пути в настройках...

Неразрешенные внешние символы/элементы
появились такие ошибки error LNK1120: неразрешенных внешних элементов: 1 error LNK2019: ссылка на неразрешенный внешний символ...

Шаблоны: неразрешенные внешние элементы
Пишу шаблонный класс-массив. Появилась такая проблема. Если инициализировать конструктор и дружественные перегрузки операторов в самом...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru