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

Оператор (-) Унарный минус. классы. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.65
AleKS17
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 9
08.05.2012, 12:42     Оператор (-) Унарный минус. классы. #1
Доброе время суток . помогите . составить operator- (унарный минус) ( что бы координаты x и y были отрицательными .( немогу понять как это сделать ..
И как ввести новые координаты x и y то есть поменять сами поля . спасибо большое . заранее

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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <tchar.h>
//---------------------------------------------------------------------------
#include <string.h>
#include <iostream.h>
#include <conio.h>
#include "stdlib.h"
#include <stdlib.h>
 
using namespace std;
class Paint
{
private:
    double x, y;
public:
Paint(double xn,double yn)
{
x=xn;
y=yn;
}
public:
Paint(const Paint& p)
{
 x=p.x;
 y=p.y;
}
public:
 void Print()
 {
        cout << "(" << x << ", " << y << ")" << endl;
 }
 public:
 double rast()
  {
         return(sqrt( abs(x*x)+ abs(y*y))) ;
  }
 public:
 short int chet()
 {  short int l;
  if (x==0&y==0) {l=0; }
  if (x>0&y>0) {l=1; }
  if (x<0&y>0) {l=2; }
  if (x<0&y<0) {l=3; }
  if (x>0&y<0) {l=4; }
  return(l);
 }
 public:
 double vektA(double a)
 {
         return (x+a);
 
 }
 double vektB(double b)
 {
     return (y+b);
 }
 
Paint& Paint :: operator++()
{
   ++x;
   ++y;
 
    return *this;
}
 
 
 
 
/*
Paint  operator-(Paint& p)
{
   p.x=-p.x;
   p.y=-p.y;
 
 
    return Paint(-x,-y);
}
 */
};
 
int _tmain(int argc, _TCHAR* argv[])
{ double xn,yn,a,b,dx,dy;
int k;
 
system("cls");
      cout<<"Vvedite koordinati x"<<endl;
    cin>>xn;
    cout<<"Vvedite koordinati y"<<endl;
    cin>>yn;
 Paint p(xn,yn) ;
 
    bool n;
    n=true;
          while (n==true){
          cout<<"0:vixod"<<endl;
           cout<<"1:vivesti koordinati" <<endl;
           cout<<"2:vivesti chetvert"<< endl;
           cout<<"3:tochku na vektor"<<endl;
           cout<<"4:vvesti novie koordinati" <<endl;
           cout<<"5:rasstoianie"<<endl;
           cout<<"6:operator <++>"<<endl;
           cout<<"7:pomenat' znaki na protivopolojnie"<<endl;
           cin>>k;
          switch(k)
          {
 
 
case 1:
cout<<"-----------------------------------------------------------------------"<<endl;
  p.Print();
cout<<"-----------------------------------------------------------------------"<<endl;
 break;
 case 2:
cout<<"-----------------------------------------------------------------------"<<endl;
      cout<<"chetvert'   "<< p.chet()<<endl;
cout<<"-----------------------------------------------------------------------"<<endl;
       break;
case 3:
cout<<"-----------------------------------------------------------------------"<<endl;
 cout<< "vvedite a"<< endl;
 cin>>a;
 cout<< "vvedite b"<< endl;
 cin>>b;
 cout<< "("<<p.vektA(a)<<","<<p.vektB(b)<<")"<<endl;
cout<<"-----------------------------------------------------------------------"<<endl;
 break;
 
 
case 5:
cout<<"-----------------------------------------------------------------------"<<endl;
   cout<<"rasstoyanie do nachala koordinat  " <<p.rast()<<endl;
cout<<"-----------------------------------------------------------------------"<<endl;
   break;
 
case 6:
 cout<<"-----------------------------------------------------------------------"<<endl;
p++;
p.Print();
 cout<<"-----------------------------------------------------------------------"<<endl;
break;
case 7:
 cout<<"-----------------------------------------------------------------------"<<endl;
 p--;
p.Print();
 cout<<"-----------------------------------------------------------------------"<<endl;
break;
case 0:
 n=false;
          }
           }
 
    getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 16:14     Оператор (-) Унарный минус. классы. #2
Насколько я понял, требуется перегрузить постфиксную операцию --, чтобы она меняла знак значения координат на противоположный. Реализовать можно так:
C++
1
2
3
4
5
void  operator--(int)
{
    x*=-1;
    y*=-1;
}
Вот полный листинг (код менял, чтобы компилировался под линуксом, возможно не всё поменял назад):
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
134
135
#include <tchar.h>
//---------------------------------------------------------------------------
#include <string.h>
#include <iostream>
#include <conio.h>
#include <cmath>
//#include "stdlib.h"
#include <stdlib.h>
 
using namespace std;
class Paint
{
private:
    double x, y;
public:
    Paint(double xn,double yn)
    {
        x=xn;
        y=yn;
    }
    Paint(const Paint& p)
    {
         x=p.x;
         y=p.y;
    }
    void Print()
    {
        cout << "(" << x << ", " << y << ")" << endl;
    }
    double rast()
    {
        return(sqrt( abs(x*x)+ abs(y*y))) ;
    }
    short int chet()
    {  
        short int l;
        if (!x && !y) l=0;
            else if (x>0 && y>0) l=1;
                else if (x<0 && y>0) l=2; 
                    else if (x<0 && y<0) l=3; 
                        else if (x>0 && y<0) l=4;
        return l;
    }
    double vektA(double a)
    {
        return (x+a);
    }
    double vektB(double b)
    {
        return (y+b);
    }
 
    void operator++(int)
    {
        ++x;
        ++y;
    }
    
    void  operator--(int)
    {
        x*=-1;
        y*=-1;
    }
};
 
int main()
{ 
    double xn,yn,a,b;
    int k;
    system("cls");
    cout<<"Vvedite koordinati x"<<endl;
    cin>>xn;
    cout<<"Vvedite koordinati y"<<endl;
    cin>>yn;
    Paint p(xn,yn) ;
 
    bool n;
    n=true;
    while (n==true)
    {
          cout<<"0:vixod"<<endl;
           cout<<"1:vivesti koordinati" <<endl;
           cout<<"2:vivesti chetvert"<< endl;
           cout<<"3:tochku na vektor"<<endl;
           cout<<"4:vvesti novie koordinati" <<endl;
           cout<<"5:rasstoianie"<<endl;
           cout<<"6:operator <++>"<<endl;
           cout<<"7:pomenat' znaki na protivopolojnie"<<endl;
           cin>>k;
          switch(k)
          {
            case 1:
                cout<<"-----------------------------------------------------------------------"<<endl;
                p.Print();
                cout<<"-----------------------------------------------------------------------"<<endl;
                 break;
            case 2:
                cout<<"-----------------------------------------------------------------------"<<endl;
                    cout<<"chetvert'   "<< p.chet()<<endl;
                cout<<"-----------------------------------------------------------------------"<<endl;
                    break;
            case 3:
                cout<<"-----------------------------------------------------------------------"<<endl;
                cout<< "vvedite a"<< endl;
                cin>>a;
                cout<< "vvedite b"<< endl;
                cin>>b;
                cout<< "("<<p.vektA(a)<<","<<p.vektB(b)<<")"<<endl;
                cout<<"-----------------------------------------------------------------------"<<endl;
                break;
            case 5:
                cout<<"-----------------------------------------------------------------------"<<endl;
                cout<<"rasstoyanie do nachala koordinat  " <<p.rast()<<endl;
                cout<<"-----------------------------------------------------------------------"<<endl;
                break; 
            case 6:
                 cout<<"-----------------------------------------------------------------------"<<endl;
                p++;
                p.Print();
                 cout<<"-----------------------------------------------------------------------"<<endl;
                break;
            case 7:
                 cout<<"-----------------------------------------------------------------------"<<endl;
                 p--;
                p.Print();
                 cout<<"-----------------------------------------------------------------------"<<endl;
                break;
            case 0:
                 n=false;
         }
    }
 
    getch();
    return 0;
}
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
08.05.2012, 16:26     Оператор (-) Унарный минус. классы. #3
Цитата Сообщение от elivin Посмотреть сообщение
Насколько я понял, требуется перегрузить постфиксную операцию --, чтобы она меняла знак значения координат на противоположный. Реализовать можно так:
в задании же написано, унарный -, а вы перегрузили декремент
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
08.05.2012, 16:27     Оператор (-) Унарный минус. классы. #4
C++
1
2
3
4
5
6
7
8
9
10
11
class Paint
{
// ...
  Paint operator-()
  {
      return Paint(-x,-y);
  }
// ...
};
// ...
p = -p;
elivin
65 / 65 / 1
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.05.2012, 16:53     Оператор (-) Унарный минус. классы. #5
в задании же написано, унарный -, а вы перегрузили декремент
Я так решил из-за кода:
C++
1
2
3
4
5
6
case 7:
 cout<<"-----------------------------------------------------------------------"<<endl;
 p--;
p.Print();
 cout<<"-----------------------------------------------------------------------"<<endl;
break;
Бывает - смотрю больше в код, чем в задание.
Yandex
Объявления
08.05.2012, 16:53     Оператор (-) Унарный минус. классы.
Ответ Создать тему
Опции темы

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