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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 835
#1

Преобразование типов. Дружественные функции - C++

07.12.2011, 00:14. Просмотров 1102. Ответов 0
Метки нет (Все метки)

Создать класс комплексных чисел. Определить перегруженную функцию, возвращающую максимальный из двух аргументов. Функция не является членом класса комплексных чисел. Перегруженные функции имеют аргументы типа int, double, complex. Тело перегруженных функций должны быть одинаковыми.
Создать два класса вектор (float *) и матрица (float **). Определить конструкторы - по умолчанию, с параметром, для класса матрица с двумя параметрами, копирования, деструкторы. Определить функцию умножения матрицу на вектор.


не много нашел помогите разобраться


Класс комплексных чисел
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <conio.h>
#include <iostream.h>
 
class compl
{
public:
float x,y;
compl();
/*Вводит компл число */   void vvod();
/*Выводит компл число */  void vivod ();
/* Оператор сложения двух комплексных чисел*/
compl operator+(compl c2);
/* Оператор вычитания двух комплексных чисел*/
compl operator-(compl c2);
/* Оператор умножения  двух комплексных чисел*/
compl operator*(compl c2);
};
 
compl::compl(){ }
 
/* Вывод комплексного числа */
void compl::vivod ()
{
cout <<x;
if (y>0)
cout <<"+"<<y<<"i";
else cout <<y<<"i";
}
 
void compl::vvod()
  {
  cout <<
  "\n Введите веществ. и мнимую части компл.числа (через пробел): ";
  cin >> x >> y ;
  }
 
compl compl::operator+(compl c2)
{
compl c1=*this,c3;
c3.x=c1.x+c2.x;
c3.y=c1.y+c2.y;
return c3;
}
 
compl compl::operator-(compl c2)
{
compl c1=*this,c3;
c3.x=c1.x-c2.x;
c3.y=c1.y-c2.y;
return c3;
}
 
compl compl::operator*(compl c2)
{
compl c1=*this,c3;
c3.x=c1.x*c2.x-c1.y*c2.y;
c3.y=c1.x*c2.y+c1.y*c2.x;
return c3;
}
 
void main()
{
compl  Z1,Z2,Z3;
 
cout<<"\n Сложение компл.чисел. Введите 1-е число: \n";
Z1.vvod();
cout<<"\n Введите 2-е число: \n";
Z2.vvod();
Z3 = Z1 + Z2;
cout<<"\n Результат: Z3=Z1+Z2 = ";
Z3.vivod();
cout<<"\n -------------------------------- ";
 
cout<<"\n Вычитание компл.чисел. Введите 1-е число: \n";
Z1.vvod();
cout<<"\n Введите 2-е число: \n";
Z2.vvod();
Z3 = Z1 - Z2;
cout<<"\n Результат: Z3=Z1-Z2 = ";
Z3.vivod();
cout<<"\n -------------------------------- ";
 
cout<<"\n Умножение компл.чисел. Введите 1-е число: \n";
Z1.vvod();
cout<<"\n Введите 2-е число: \n";
Z2.vvod();
Z3 = Z1 * Z2;
cout<<"\n Результат: Z3=Z1*Z2 = ";
Z3.vivod();
cout<<"\n -------------------------------- ";
 
cout<<"\n Для выхода - нажмите клавишу";
getch();  
}
перегружать имя функции

Как и в случае со встроенной операцией сложения, нам может понадобиться набор функций, выполняющих одно и то же действие, но над параметрами различных типов. Предположим, что мы хотим определить функции, возвращающие наибольшее из переданных значений параметров. Если бы не было перегрузки, пришлось бы каждой такой функции присвоить уникальное имя. Например, семейство функций max() могло бы выглядеть следующим образом:
C++
1
2
3
int i_max( int, int );
int vi_max( const vector<int> & );
int matrix_max( const matrix & );
Однако все они делают одно и то же: возвращают наибольшее из значений параметров. С точки зрения пользователя, здесь лишь одна операция – вычисление максимума, а детали ее реализации большого интереса не представляют.
Отмеченная лексическая сложность отражает ограничение программной среды: всякое имя, встречающееся в одной и той же области видимости, должно относиться к уникальной сущности (объекту, функции, классу и т.д.). Такое ограничение на практике создает определенные неудобства, поскольку программист должен помнить или каким-то образом отыскивать все имена. Перегрузка функций помогает справиться с этой проблемой.
Применяя перегрузку, программист может написать примерно так:
C++
1
2
3
4
int ix = max( j, k );
vector<int> vec;
//...
int iy = max( vec );

Перегрузка функций - это создание нескольких функций с одним именем, но с разными параметрами. Разные параметры значит что должно быть разным количество аргументов функции или их тип. Вот так например:

C++
1
2
3
void function(int x); 
void function(int x,int y); 
void function(float x);
Перегруженные имена функций - это главным образом удобство записи.Пример перегруженной функции-функция sqrt( ) (извлечение квадратного корня).Она перегружена для каждого типа параметра - int,float,double,long и т.д. Вы просто пишете sqrt(4) ili sqrt (3.463),компилятор сам понимает по типу параметра какую функцию надо вызвать.

пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream.h>
void f(int x);
void f(double x);
 
int main()
{
 
f(10);
f(25e9); //для тех кто не знает- 25e9 это 25*1000000000
return 0;
}
void f(int x)
{
 
cout<<" type of "<<x<<" is int"<<endl;
}
 
void f(double x)
{
 
cout<<" type of "<<x<<" is float"<<endl;
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2011, 00:14     Преобразование типов. Дружественные функции
Посмотрите здесь:

Преобразование типов. Дружественные функции. Конструктор копирования. - C++
Создать класс вещественных чисел Double. Определить перегруженную функцию, возвращающую максимальное из двух аргументов. Функция не...

Преобразование типов. Дружественніе функции. Конструктор копирования - C++
Напишите пожалуста 3 программы ато завал нада здать ( 1 Задача: Создать класс вещественных чисел Double. Пределить перегруженную функцию,...

Дружественные функции - C++
Тут выдает ошибку Помогите Ошибка 3 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает...

дружественные функции - C++
Тема: дружественные функции Напишите программу обращения слова. Помогите решить на С++

дружественные функции - C++
Всем привет!!! Есть код: #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;string.h&gt; enum...

Дружественные функции - C++
С дружественными классами разобрался, спасибо. А теперь ф-ции. Киньте пожалуста простой пример: класс(несколько полей), обьект описаный в...

Дружественные функции - C++
Добрый день. Подскажите как правильно запихнуть данные код в тело дружественной функции. Моё задание:&quot;Напишите программу, вычеркивающую...

Дружественные функции С++ - C++
Здравствуйте, помогите пожалуйста решить задачку с помощью дружественных функций: Считайте текст и выведите на экран исходный текст, а...

Дружественные функции - C++
Создать объект динамический стек. Перегрузить операции +, +=, -= (с извлечением элемента).

Дружественные функции - C++
Создать класс «студент» (его фамилия, имя, год рождения и год поступления). Написать: а) член-функцию печати информации о студенте; ...

Дружественные функции - C++
День добрый. class Distance { private: int fut; int inch; public: Distance():fut(0),inch(0){}; Distance(int f,int...

Дружественные функции - C++
Задание: создать дружественные функции . Вроде всё работает, но возможно я неправильно что то написала. Почему так часто вызывается...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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