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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
#1

Перегрузка оператора ровно! - C++

12.04.2011, 19:49. Просмотров 2986. Ответов 15
Метки нет (Все метки)

Подскажите как перегрузить этот оператор???
C++
1
Triangles& operator = (const Triangles& y);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2011, 19:49     Перегрузка оператора ровно!
Посмотрите здесь:

Перегрузка оператора + и = - C++
Здравствуйте! Возникла проблема при реализации кода перегрузки операторов. BigInt - это просто класс характеризующий огромные числа в...

Перегрузка оператора - - C++
В своём классе я перегрузил оператор -,но в функции,использующей вычитание возникает ошибка error C2678: бинарный "-": не найден...

Перегрузка оператора [] - C++
Здравствуйте. Пробую перегрузить оператор . template <class Element> class List { public: struct Node { Element el; ...

Перегрузка оператора - C++
Доброго времени суток. Столкнулся с проблемой перегрузки оператора "++" выдает ошибку в первой строке: postfix ‘const Counter...

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора = - C++
Здравствуйте! При попытке заменить объект пользовательского класса q4 на q6 в контейнере set появляется ошибка: error C2678: binary '=' :...

Перегрузка оператора () - C++
Привет всем помогите придумать способ реализаци следущей задачи: есть класс симметричная матрица: class Matrix { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
12.04.2011, 19:54     Перегрузка оператора ровно! #2
= - оператор присваивания, == - оператор равно, оператор присваивания в С++ перегрузить нельзя, если бы это было возможно производительностьность умерлабы гдето в сотню раз
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
12.04.2011, 19:56  [ТС]     Перегрузка оператора ровно! #3
а тогда подскажи как присвоить два значения в методе класса
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
#include <math.h> 
#include <iostream> 
#include "class.h" 
#include "angle.h"
using namespace std;
Triangles::Triangles(){
  q=w=e=0;
}; 
Triangles::Triangles(int q1, int w1, int e1){
  q=q1,w=w1,e=e1;
};
Triangles::Triangles (const Triangles& y1){
 q=y1.q, w=y1.w, e=y1.e;
};
ostream& operator<<(ostream& out, const Triangles& y) {
   out<<"a="<<y.q<<" b="<<y.w<<" c="<<y.e<<endl;
   return out;
};
istream& operator >>(istream& in, Triangles& y){
   do{
         in>>y.q>>y.w>>y.e;
   if((y.q>=y.w+y.e)||(y.w>=y.e+y.q)||(y.e>=y.w+y.q))
   cout<<"Poprobuyte snova!!!\n";
}while((y.q>=y.w+y.e)||(y.w>=y.e+y.q)||(y.e>=y.w+y.q)); 
return in;
};
double Triangles::pirimetr(){
       return (q+w+e);
};
double Triangles::plosh(){ 
       return(0.25*(sqrt((q+w+e)*(q+w-e)*(q+w-e)))); 
};  
double Triangles::visota1(){
       return (0.25*(sqrt((q+w+e)*(w+e-q)*(q+w-e)))/q*2);
       }; 
double Triangles::visota2(){
       return (sqrt(0.25*(sqrt((q+w+e)*(e+w-q)*(q+w-e))))/w*2); 
       };    
double Triangles::visota3(){ 
            return (0.25*(sqrt((q+w+e)*(q+w-e)*(q+w-e)))/e*2);   
       };
       string Triangles::vid(){ 
if((e*e==q*q+w*w)||(q*q==e*e+w*w)||(w*w==q*q+e*e))
      return "Prymoygolniy"; 
      else if((q==w)&&(w==e)&&(q==e))
      return "Ravnostoronniy";
      else if((q==w)||(q==e)||(e==w))
      return "Ravnobedrenniy";
      else 
      return "Drugoy";
      }; 
int Triangles::Tri(){
                 return (120);};      
    
 
       
angle::angle(){
   x=0; y=0;};
   
angle::angle(int x1, int y1) {
   x=x1; y=y1;};
   
angle::angle(const angle& u1) {
   x=u1.x; y=u1.y;};
 
int angle::getx() {return x;};
int angle::gety() {return y;};
void angle::setx(int x1) {x=x1;};
void angle::sety(int y1) {y=y1;};
 
 
angle angle::operator+(angle& u2) {
   if(y+u2.y<60)
   return angle(x+u2.x, y+u2.y);
   else
   return angle(x+u2.x+1, y+u2.y-60);};
 
angle angle::operator-(angle& u3) {
   if((x-u3.x>0)&&(y-u3.y<0))
   return angle(x-u3.x-1, y-u3.y+60);
   else
   if((x-u3.x<0)&&(y-u3.y>0))
   return angle(x-u3.x+1, 60-(y-u3.y));
   else
   return angle(x-u3.x, y-u3.y);
   };   
       
double angle::degtorad(){
   return ((60.0*x+y)/10800.0)*3.1415;};
 
bool angle::comparison(const angle& u){
      if((x>u.x))
      return false;
      else if((x==u.x)&&(y>u.y))
      return false;
      else if ((x==u.x)&&(y==u.y))
      return true;
      else
      return false;
      };
 
angle angle::reduction(){
      if((x<=0)&&(y<=0))
      {while(x<=0) x+=360;
      if(y<0)
      return angle(x-1,60+y);
      else
      return angle(x,y);}
      else
      {while(x>=360) x-=360;
      return angle(x,y);}
      };
double angle::sinus(){
       return sin(degtorad());
};
 
bool Triangles::tre(){
     angle a5,a6(180,0); //cсравнение углов
     a5=a+b+c;
     return (a5.comparison(a6));
     
     };
нужно a присвоить значение какого нибудь метода например a=FIGNYA();
prazuber
12.04.2011, 19:56
  #4

Не по теме:

Как это оператор присваивания нельзя перегрузить? Вы уверены?

Selendis
1 / 1 / 0
Регистрация: 15.02.2011
Сообщений: 43
12.04.2011, 20:03     Перегрузка оператора ровно! #5
Кедр, конкретизируй вопрос - что такое а и в какой строчке оно используется. Оператор присвоения можно перегрузить например так:
C++
1
2
3
4
5
6
Triangles& operator = (const Triangles& y)
{
this->a = y.a;
this->b = y.b;
return *this;
}
skaa
Хочу в Исландию
1027 / 826 / 75
Регистрация: 10.11.2010
Сообщений: 1,626
12.04.2011, 20:03     Перегрузка оператора ровно! #6
Оператор присваивания в C++ можно перегружать:
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
class   Triangles
{
public:
    double  a,b,c;
    Triangles   &Triangles::operator    =(const Triangles &y)
    {
        if(this!=&y)
        {
            this->a=y.a;
            this->b=y.b;
            this->c=y.c;
        }
 
        return *this;
    }
};
void    main()
{
    Triangles   x,y;
 
    x.a=1;
    x.b=2;
    x.c=3;
    y=x;
}
.
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
12.04.2011, 20:11     Перегрузка оператора ровно! #7
Цитата Сообщение от skaa Посмотреть сообщение
Оператор присваивания в C++ можно перегружать:
первый раз слышу, давно не писал на С++ возможно стандарты поменялись, будте добры скинте источник


Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
а тогда подскажи как присвоить два значения в методе класса
используй конструктор копии, погугли
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
12.04.2011, 20:12  [ТС]     Перегрузка оператора ровно! #8
Мне нужно записать углы в используя класс angle в класс Trangle
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
#ifndef CLASS 
#define CLASS 
#include <iostream> 
#include "angle.h"
 
using namespace std; 
 
            class  Triangles{ 
            public:
            Triangles();
            Triangles(int,int,int);
            Triangles(angle,angle,angle);
            Triangles(const Triangles&);       
            friend istream& operator >>(istream& , Triangles& );
            friend ostream& operator <<(ostream& , const Triangles& );
            Triangles& operator = (const Triangles& );
            double pirimetr();
            double plosh();
            double visota1();
            double visota2();
            double visota3();
            string vid();
            bool tre();
            int Tri();
            private:
            int q,w,e;        
            angle a,b,c; 
 }; 
 #endif
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
#include <math.h> 
#include <iostream> 
#include "class.h" 
#include "angle.h"
using namespace std;
Triangles::Triangles(){
  q=w=e=0;
}; 
Triangles::Triangles(int q1, int w1, int e1){
  q=q1,w=w1,e=e1;
};
Triangles::Triangles (const Triangles& y1){
 q=y1.q, w=y1.w, e=y1.e;
};
ostream& operator<<(ostream& out, const Triangles& y) {
   out<<"a="<<y.q<<" b="<<y.w<<" c="<<y.e<<endl;
   return out;
};
istream& operator >>(istream& in, Triangles& y){
   do{
         in>>y.q>>y.w>>y.e;
   if((y.q>=y.w+y.e)||(y.w>=y.e+y.q)||(y.e>=y.w+y.q))
   cout<<"Poprobuyte snova!!!\n";
}while((y.q>=y.w+y.e)||(y.w>=y.e+y.q)||(y.e>=y.w+y.q)); 
return in;
};
Triangles::operator = (const Triangles &y ){
            
                
                        this->a=y.q;
                        this->b=y.w;
                        this->c=y.e;
                
                return *this;
                };
 
double Triangles::pirimetr(){
       return (q+w+e);
};
double Triangles::plosh(){ 
       return(0.25*(sqrt((q+w+e)*(q+w-e)*(q+w-e)))); 
};  
double Triangles::visota1(){
       return (0.25*(sqrt((q+w+e)*(w+e-q)*(q+w-e)))/q*2);
       }; 
double Triangles::visota2(){
       return (sqrt(0.25*(sqrt((q+w+e)*(e+w-q)*(q+w-e))))/w*2); 
       };    
double Triangles::visota3(){ 
            return (0.25*(sqrt((q+w+e)*(q+w-e)*(q+w-e)))/e*2);   
       };
       string Triangles::vid(){ 
if((e*e==q*q+w*w)||(q*q==e*e+w*w)||(w*w==q*q+e*e))
      return "Prymoygolniy"; 
      else if((q==w)&&(w==e)&&(q==e))
      return "Ravnostoronniy";
      else if((q==w)||(q==e)||(e==w))
      return "Ravnobedrenniy";
      else 
      return "Drugoy";
      }; 
int Triangles::Tri(){
                 return (120);};      
    
 
       
angle::angle(){
   x=0; y=0;};
   
angle::angle(int x1, int y1) {
   x=x1; y=y1;};
   
angle::angle(const angle& u1) {
   x=u1.x; y=u1.y;};
 
int angle::getx() {return x;};
int angle::gety() {return y;};
void angle::setx(int x1) {x=x1;};
void angle::sety(int y1) {y=y1;};
 
 
angle angle::operator+(angle& u2) {
   if(y+u2.y<60)
   return angle(x+u2.x, y+u2.y);
   else
   return angle(x+u2.x+1, y+u2.y-60);};
 
angle angle::operator-(angle& u3) {
   if((x-u3.x>0)&&(y-u3.y<0))
   return angle(x-u3.x-1, y-u3.y+60);
   else
   if((x-u3.x<0)&&(y-u3.y>0))
   return angle(x-u3.x+1, 60-(y-u3.y));
   else
   return angle(x-u3.x, y-u3.y);
   };   
       
double angle::degtorad(){
   return ((60.0*x+y)/10800.0)*3.1415;};
 
bool angle::comparison(const angle& u){
      if((x>u.x))
      return false;
      else if((x==u.x)&&(y>u.y))
      return false;
      else if ((x==u.x)&&(y==u.y))
      return true;
      else
      return false;
      };
 
angle angle::reduction(){
      if((x<=0)&&(y<=0))
      {while(x<=0) x+=360;
      if(y<0)
      return angle(x-1,60+y);
      else
      return angle(x,y);}
      else
      {while(x>=360) x-=360;
      return angle(x,y);}
      };
double angle::sinus(){
       return sin(degtorad());
};
 
bool Triangles::tre(){
     angle a5,a6(180,0); //cсравнение углов
     a5=a+b+c;
     return (a5.comparison(a6));
     
     };
это метод реализации решения как присвоить значению а метод именно для этого класса?? подскажите у меня компилятор ругается!!
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
12.04.2011, 20:17     Перегрузка оператора ровно! #9
ок извеняюсь http://ru.wikipedia.org/wiki/%D0%9E%...2_%D0%A1%2B%2B

Добавлено через 2 минуты
"это метод реализации решения как присвоить значению а метод именно для этого класса?? подскажите у меня компилятор ругается!! "

замени Triangles::operator = (const Triangles &y ) на Triangles& Triangles::operator = (const Triangles &y )

Добавлено через 37 секунд
в cpp файле
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
12.04.2011, 20:19  [ТС]     Перегрузка оператора ровно! #10
заменил, теперь он типа не знает переменные мои=)
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
12.04.2011, 20:54     Перегрузка оператора ровно! #11
слегка сложно понять какие переменные, конкретезируйте пжлст
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
12.04.2011, 20:59  [ТС]     Перегрузка оператора ровно! #12
вот смотрите.. постараюсь объяснить!!!
Мои переменные в классе Triangles.... angle a,b,c:-это объекты класса angle которые представляет углы в градусах и минутах!!!
т.е если суммы углов ровна 180 градусов то выводит что треугольник существует...
Класс Triangles это представление всей возможной информации о треугольнике, вид, площадь, высоты, периметр и т д.... мне нужно что бы используя класс angle он выдал углы треугольника который я ввожу в классе Triangles...как то так=)
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
12.04.2011, 21:11     Перегрузка оператора ровно! #13
ок мне кажется я тебя понял, но надо идти с роботы, через час два дома напишу
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
12.04.2011, 21:13  [ТС]     Перегрузка оператора ровно! #14
спасибо!! объясните только как присвоить значения и больше мне ничего не нужно, сам хочу разобраться!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 15:12     Перегрузка оператора ровно!
Еще ссылки по теме:

Перегрузка оператора = - C++
Допустим я имею две перегрузки: Zakaz&amp; operator=(Zakaz&amp;); Zakaz operator=(Zakaz); Когда какая из них системой будет...

Перегрузка оператора << - C++
Доброго времени суток. В общем задача состоит в том, чтобы перегрузить операторы &gt;&gt; и &lt;&lt; для чтения/записи в файл. Если идет (a,b) -...

Перегрузка оператора == - C++
нужно сравнить 1) объект класса abc с объектом класса abc1 2) объект класса abc с другим объектом класса abc 3) объект класса abc1...

Перегрузка оператора - C++
#include &lt;iostream&gt; class Node { public: char *s; int length; Node * next; public: Node(); Node(char* val) {

Перегрузка оператора [] - C++
Что не правильно я перегрузил? #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; struct S_List { char c; S_List...


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

Или воспользуйтесь поиском по форуму:
while(i)k++
48 / 48 / 5
Регистрация: 13.08.2010
Сообщений: 160
13.04.2011, 15:12     Перегрузка оператора ровно! #15
C++
1
2
3
4
5
6
7
8
9
Triangles::operator = (const Triangles &y ){
            
                
                        this->a=y.q;
                        this->b=y.w;
                        this->c=y.e;
                
                return *this;
                };
смотри тут у тебя a типа Angle a q типа int нельзя углу присвоить значение числа

зделай так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Triangles::operator = (const Triangles &y ){
            
                
                        this->q=y.q;
                        this->w=y.w;
                        this->e=y.e;
//start (1)
                        this->a.x=y.a.x;
                        this->a.y=y.a.y;
                        this->b.x=y.b.x;
                        this->b.y=y.b.y;
                        this->c.x=y.c.x;
                        this->c.y=y.c.y;
//end (1)
/*если перегрузис оператор присваивания в Angle то сможеш вместо 
     (1) написать так
                this->a=y.a;
                this->b=y.b;
                this->c=y.c;*/
                return *this;
                };
Yandex
Объявления
13.04.2011, 15:12     Перегрузка оператора ровно!
Ответ Создать тему
Опции темы

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