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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.65
AleKS17
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 9
#1

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

08.05.2012, 12:42. Просмотров 4597. Ответов 4
Метки нет (Все метки)

Доброе время суток . помогите . составить 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2012, 12:42     Оператор (-) Унарный минус. классы.
Посмотрите здесь:

Переопределение операции: постфиксный унарный + C++
Как сделать, чтобы калькулятор реагировал на унарный минус C++
C++ Как вызвать в главной программе оператор унарный минус
C++ Унарный минус на С#
C++ Как правильно перегружать унарный минус?
C++ Оператор суммирования (классы, перегрузка операторов)
Хорошо ли использовать унарный плюс вместо функции получения модуля? Если нет, то почему? C++
C++ Заполнить массив единицами и минус единицами и поменять единицы и минус единицы местами
C++ Определить унарный оператор ++ как дружественную функцию
Определить перегруженный бинарный и унарный оператор* для класса "Комплексное число" C++
C++ Классы, дружественная функция, оператор ввода
Объясните значение операций: дополнение ~lvalue, унарный плюс и минус, операция создания с размещением C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
1897 / 1429 / 106
Регистрация: 29.05.2011
Сообщений: 2,985
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     Оператор (-) Унарный минус. классы.
Ответ Создать тему
Опции темы

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