С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Uinslou
Старичок :)
728 / 315 / 5
Регистрация: 03.04.2011
Сообщений: 1,430
#1

Перегрузка. - C++

11.03.2012, 22:12. Просмотров 521. Ответов 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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#ifndef OTREZOK_H
#define OTREZOK_H
 
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
class Otrezok
{friend ostream &operator<<(ostream &, const Otrezok &); //перегрузка операций передачи в поток{
friend istream &operator>>(istream &, Otrezok &); // и извлечения из потока,в качестве друзей класса
public:
bool operator==( Otrezok &);
bool operator!=(const Otrezok &right)const
{
return!(*this==right);
};
float operator+(Otrezok &);
Otrezok() ;
Otrezok(float ,float ,float,float );
 
void setFunk(float,float ,float ,float );
 
float Dlinni();
 
void sr_Dlinni( Otrezok);
 
//void Peresechenie();
 
float VecM() ;
float VecN();
 
void print_ne_per() const;
void otr_peresechenie(Otrezok otr2);
 
void print_per() const;
void input();
void print_bol();
void print_men();
void print_ravn();
float get_fun_xk11();
float get_fun_xk12();
float get_fun_yk11();
float get_fun_yk12();
private:
 
float xk11,yk11,xk12,yk12;
};
 
#endif // OTREZOK_H
Интерфейс:

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "otrezok.h"
 
#include <iostream>
#include <math.h>
 
using std::cout;
using std::cin;
using std::ostream;
using std::istream;
 
ostream &operator<<(ostream &output, const Otrezok &o1)
{
output<<o1.Dlinni();
return output; //позволяет передавать обьекты cout<<x<<y;
}
istream &operator>>(istream &input, Otrezok &o1)
{ cout<<"Vvedite x1";
input>>o1.xk11;
cout<<"Vvedite y1";
input>>o1.yk11;
cout<<"Vvedite x2";
input>>o1.xk12;
cout<<"Vvedite y2";
input>>o1.yk12;
return input; //cin<<x<<y;
}
bool Otrezok::operator==( Otrezok &o1)
{
if((*this).Dlinni()==o1.Dlinni())
{
return true;
}
else
return false;
}
float Otrezok::operator+(Otrezok &o1)
{
return((*this).Dlinni()+o1.Dlinni());
}
Otrezok::Otrezok()
 
{
xk11=0; //конструктор по умолчанию
yk11=0;
xk12=0;
yk12=0;
}
Otrezok::Otrezok( float x11, float y11, float x12, float y12)
{
setFunk(x11,y11,x12,y12); //устанавливаем параметры явным образом через сет-функцию
}
 
void Otrezok::setFunk(float x11, float y11, float x12, float y12)
{
xk11=x11;
yk11=y11;
xk12=x12;
yk12=y12;
}
float Otrezok::Dlinni()
{float otrezok;
otrezok=sqrt(pow((xk12-xk11),2)+pow((yk12-yk11),2)); //вычисляем длинну заданого отрезка
return otrezok; }
void Otrezok::sr_Dlinni( Otrezok otr2)
{
if ( (*this).Dlinni()>otr2.Dlinni() ) //функция сравнения длинн отрезков,передавая в качестве параметров
{print_bol();} //объект класса отрезок
if( (*this).Dlinni()==otr2.Dlinni())
{print_ravn();}
if( (*this).Dlinni()<otr2.Dlinni())
{print_men();}
 
}
float Otrezok::VecM()
{float m1;
m1=(xk12-xk11);//вычисление направляющих веторов отрезка
return m1;}
float Otrezok::VecN()
{float n1;
n1=(yk12-yk11);
return n1;
}
void Otrezok::otr_peresechenie(Otrezok otr2)
{
 
if(((*this).VecM()/otr2.VecM())==((*this).VecN()/otr2.VecN())) //сравнение направляющих векторов
{print_ne_per(); //если равны вызываем констант функцию,что печатает на экран.
 
}
 
else
print_per(); //иначе вызываем констант функцию,что печатает на экран,информацию,о том что отрезки не пересекаются.
 
}
void Otrezok::print_ne_per()const
{
cout<<"Otrezki ne peresekauts9"<<"\n";
}
void Otrezok::print_per() const
{
cout<<"Otrezki peresekauts9"<<"\n";
}
float Otrezok::get_fun_xk11()
{return xk11;
}
float Otrezok::get_fun_xk12()
{return xk12;
}
float Otrezok::get_fun_yk11()
{return yk11;
}
float Otrezok::get_fun_yk12()
{return yk12;
}
 
void Otrezok::print_bol()
{cout<< "Otrezok1 bolshe Otrezka2"<<"\n";
}
void Otrezok::print_ravn()
{ cout<<"Otrezki ravni"<<"\n";
}
void Otrezok::print_men()
{cout<<"Otrezok1 menshe Otrezka2"<<"\n";
}
void Otrezok::input()
{ float x11,x12,y11,y12;
cout<<"Vvedite x11 dl9 otrezka"<<"\t";
cin>>x11;
cout<<"Vvedite y11 dl9 otrezka"<<"\t";
cin>>y11;
cout<<"Vvedite x12 dl9 otrezka"<<"\t";
cin>>x12;
cout<<&q
Как мне объяснили, само задание компилируется отлично, но как только добавляют извлечение и передачу в поток (перегрузка операций), всё, выдает кучу ошибок.

Вот, собственно, сами ошибки:

C:\Users\Any\Desktop\otrezok.h|11|error: ISO C++ forbids declaration of 'ostream' with no type|
C:\Users\Any\Desktop\otrezok.h|11|error: 'ostream' is neither function nor member function; cannot be declared friend|
C:\Users\Any\Desktop\otrezok.h|11|error: expected ';' before '&' token|

Для истрим такие же.

Что подскажете? Я сам немного в ступоре. Пойду пока "похимичу", если кто чем поможет, с меня плюс
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 22:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка. (C++):

Перегрузка в виде метода VS Перегрузка в виде функции друг - C++
Привет! Собственно сабж: В каких случаях используется перегрузка в виде метода, а когда в виде функции друг? Добавлено через 4...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Перегрузка new - C++
Дайте примеры на перегрузку. #define n ... // Некая целая константа class a { ... }; // Некий класс a *p=new a; // Здесь должен быть...

перегрузка - C++
1 С помощью механизма перегрузки функций реализовать функции для нахождения суммы: 1) двух чисел (результат – число); 2) двух строк...

Перегрузка [][] - C++
Возможно ли для данного класса обеспечить перегрузку жвойных скобок с тем, чтобы в программе можно было использовать выражения типа: ...

перегрузка [] - C++
Есть класс, и почему компилятор выдает ошибку на функции int &amp;operator(int); #ifndef ARRAY1_H #define ARRAY1_H #include...

2
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
11.03.2012, 22:44 #2
надо указать явно std::ostream/std::istream в заголовке.
1
gooseim
Эксперт С++
509 / 413 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
11.03.2012, 22:52 #3
C++
1
#include <fstream>
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 22:52
Привет! Вот еще темы с ответами:

Перегрузка +,-,++,-- - C++
Задание примерно такое: Создать класс линейного списка List. С помощью перегруженных операций реализовать: 1) переместиться в...

перегрузка [] - C++
Здравствуйте! код из учебного пособия. (возможно немного не рабочий) текст перед кодом- &quot;Пусть класс определен как строка символов....

перегрузка - C++
а чем отличаются перегрузка как метод и как функция?

Перегрузка в c++ - C++
Собственно для чего нужна перегрузка функций или операторов ?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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