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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ как в квадратной матрице работать с побочной диагональю? http://www.cyberforum.ru/cpp-beginners/thread400778.html
мне надо найти максимальный элемент побочной диагонали как мне объявить что бы оаботать с побочною диагональю я не знаю Добавлено через 3 минуты спасибо ненадо уже придумал)
C++ Дана матрица A[10][12], содержащая данные о количестве выпавших в городе осадков (в мм) за каждый месяц последних 10 лет. Добрый вечер(утро,день) Помогите решить пустяковую задачу на С++. Я уже искал просматривал подобные решения задач. Но что то в них совсем запутался, видимо потому что раньше когда то давно изучал тока турбопаскаль, а на С++ перейти совсем непросто. Буду очень признателен за любую помощь. Дана матрица A, содержащая данные о количестве выпавших в городе осадков (в мм) за каждый месяц последних... http://www.cyberforum.ru/cpp-beginners/thread400772.html
C++ В массиве удалить последнюю группу положительных элементов
В массиве A=(a1, а2, ..., аn) удалить последнюю группу положительных элементов (прим.: группой называется подряд идущие элементы одного знака, число которых больше или равно 2). Я, будучи еще совсем зеленым новичком, попытался создать такую программу, но тщетно, и у меня вылезает куча ошибок. Я знаю, что программа даже не завершена до конца, но в конце я вообще застопорился, и совсем не...
C++ программа на С
Удалить одинаковые слова предложения, идущие подряд.
C++ существует ли в С++ генератор случайных не целых чисел http://www.cyberforum.ru/cpp-beginners/thread400759.html
?????
C++ Отсортировать нечетные строки матрицы Отсортировать нечетные строки матрицы А(6х7) в порядке убывания, а четные – в порядке возрастания. подробнее

Показать сообщение отдельно
zmei89
31 / 6 / 1
Регистрация: 10.09.2010
Сообщений: 810
07.12.2011, 00:14     Преобразование типов. Дружественные функции
Создать класс комплексных чисел. Определить перегруженную функцию, возвращающую максимальный из двух аргументов. Функция не является членом класса комплексных чисел. Перегруженные функции имеют аргументы типа 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;
 Комментарий модератора 
Используйте теги форматирования кода!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru