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

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

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

C++ Перегрузка оператора ^
Перегрузка оператора *= C++
C++ С++ перегрузка оператора
Перегрузка оператора == и др C++
C++ Перегрузка оператора ++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Хочу в Исландию
 Аватар для skaa
1024 / 823 / 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
спасибо!! объясните только как присвоить значения и больше мне ничего не нужно, сам хочу разобраться!!
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;
                };
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 15:15     Перегрузка оператора ровно!
Еще ссылки по теме:

C++ Перегрузка оператора <<
C++ Перегрузка оператора +
C++ Перегрузка оператора <<

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

Или воспользуйтесь поиском по форуму:
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
13.04.2011, 15:15  [ТС]     Перегрузка оператора ровно! #16
вот в кометариях хорошая идея написана......попробую!!!=)) спасибо=))
Yandex
Объявления
13.04.2011, 15:15     Перегрузка оператора ровно!
Ответ Создать тему
Опции темы

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