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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 824
07.12.2011, 00:14     Преобразование типов. Дружественные функции #1
Создать класс комплексных чисел. Определить перегруженную функцию, возвращающую максимальный из двух аргументов. Функция не является членом класса комплексных чисел. Перегруженные функции имеют аргументы типа 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++
Дружественные функции C++
C++ дружественные функции
Преобразование типов. Дружественные функции. Конструктор копирования. C++
C++ Дружественные функции
Дружественные функции С++ C++
C++ Дружественные функции. Наследование. Перегрузка функции
Дружественные функции C++

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

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

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