Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
1

Перегрузка операции / в классах

28.10.2017, 19:16. Показов 1182. Ответов 6
Метки нет (Все метки)

Собственно, я создаю два объекта класса figure (см.код), А и В.
В задании сказано, что нужно перегрузить бинарную функцию А/В как “А бьет В” (по-сути - это шашки).
Я не представляю себе какой результат будет от такого действия, и как вообще реализовать это деление. Помогите, пжл.
P.S. Зато, мне удалось успешно перегрузить операции ввода/вывода)

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
#include<iostream>
#include<string>
using namespace std;
 
 
class figure;
 
class checker
{
    int number;
    int x;
    int y;
 
    public:
        checker()
        {
            number = 0;
            x = 0;
            y = 0;
        };
        checker(int Number, int X, int Y)
        {
            number = Number;
            x = X;
            y = Y;
        }
        checker(const checker &obj)
        {
            number = obj.number;
            x = obj.x;
            y = obj.y;
        }
 
        ~checker(){cout<<"1Destructor's ought to work here!"<<endl;}
        void step(figure&);
        void hit();
};
 
/*class king
{
public:
    void step(figure&);
    void hit();
};*/
 
class figure
{
    private:
        int c;
        int d;
        string color;
 
        friend void checker::step(figure&);
        //friend void king::step(figure&);
        void hit();
 
    public:
        figure()
        {
            c = 0;
            d = 0;
            color = "no name";
        };
        figure(int C, int D, string color)
        {
            c = C;
            d = D;
            this->color = color;
        }
        figure(const figure &obj)
        {
            c = obj.c;
            d = obj.d;
            color = obj.color;
        }
 
        //Перегруз <<
        friend ostream & operator<<(ostream & os, const figure & t);
 
        //Перегруз >>
        friend istream & operator>>(istream & is, figure & t1);
 
        ~figure (){cout<<"2Destructor's ought to work here!"<<endl;}
};
 
void checker::step(figure &a)
{
    cout<<"Ordinal number of checker: "<<number<<endl;
    cout<<"Color - "<<a.color<<endl;
 
    cout<<"Coordinate x= "<<x<< endl;
    cout<<"Coordinate y= "<<y<< endl;
 
    cout<<"New coordinate x after step: " <<a.c<<endl;
    cout<<"New coordinate y after step: " <<a.d <<endl<<endl;
 
}
 
ostream & operator<<(ostream & os, const figure & t)
{
    os<<"After step, this figure will have new "<<t.c<< " x coordinate and new "<<t.d<<" y coordinate and its color is "<<t.color<<endl;
    return os;
}
 
istream & operator>>(istream & is, figure & t1)
{
    is>>t1.c>>t1.d>>t1.color;
    return is;
}
 
 
int main()
{
    figure A = figure(6,1,"black");//объект А
    figure B = figure(4,0,"white");//объект В
    checker K = checker(1, 1, 1);
    K.step(A);
    
//Эта часть должна реализовать /
/*figure Akickb = A/B;
    cout<<"A hit B: "<<Akickb;*/
 
 
    /*cout<<A<<endl;
    cin>>A;
    cout<<endl;
    cout<<A<<endl;*/
 
    return 0;
 
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2017, 19:16
Ответы с готовыми решениями:

В производных классах перегрузить заданные операции
Нужна помощь с перегрузкой, я в ней не особо шарю. В общем есть такой код : #include &lt;iostream&gt;...

Перегрузка операции +
Всем привет! Ребята, обясните, пжлста, почему конструктор вызывается дважды. Rational integer1(...

Перегрузка операции >>
Всем привет! Суть: есть класс, есть объект, есть перегруженная операция &gt;&gt; для ввода полей...

Перегрузка операции >>
Вообщем хочу перегрузить операцию &gt;&gt; и инициализировать с ее помощью класс. Но что-то перемудрил и...

6
1265 / 1023 / 469
Регистрация: 25.12.2016
Сообщений: 3,331
29.10.2017, 07:57 2
Цитата Сообщение от Max_Raptor Посмотреть сообщение
какой результат будет от такого действия
Вероятно, фигура A с новыми координатами.
0
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
29.10.2017, 09:34  [ТС] 3
likehood, допустим, а код-то такой будет? Именно для перегруза /
0
1265 / 1023 / 469
Регистрация: 25.12.2016
Сообщений: 3,331
29.10.2017, 10:10 4
Лучший ответ Сообщение было отмечено Max_Raptor как решение

Решение

Например так
C++
1
2
3
4
5
6
7
8
9
10
11
figure operator/(figure A, figure B)
{
    if (A может пробить B) {
        A = ... // вычисляем новые координаты A
    }
    else  {
        A.x = -1; // признак того, что пробить нельзя
    }
    
    return A;
}
1
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
29.10.2017, 14:19  [ТС] 5
likehood, а вместо "может пробить" мне какую-то операцию написать? Да и новые координаты А как вписать?
Если А - это figure. Слишком сырой прототип
0
1265 / 1023 / 469
Регистрация: 25.12.2016
Сообщений: 3,331
29.10.2017, 15:13 6
Цитата Сообщение от Max_Raptor Посмотреть сообщение
а вместо "может пробить" мне какую-то операцию написать? Да и новые координаты А как вписать?
Это зависит от правил, а в шашках их, насколько помню, несколько разновидностей.
Цитата Сообщение от Max_Raptor Посмотреть сообщение
Слишком сырой прототип
На то он и прототип.
0
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
29.10.2017, 18:05  [ТС] 7
likehood, вообщем, реализовал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
figure operator/(figure &A, figure &B)
{
    if (A.c > B.c) {
        A.c = B.c;
        A.d = B.d;
    }
    else  {
        A.c = -1;
        A.d = -1;
    }
    return A;
}
То есть, если сразу у объекта А первая координата (то бишь с) больше по значению, чем у В, то А бьет В.
Бред, конечно, но хоть как-то надо показать перегруз /.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2017, 18:05

Перегрузка операции >>
Здравствуйте. Возник такой вопрос: возможни ли перегрузить оператор &gt;&gt; так, чтобы пользователь мог...

Перегрузка операции
Никак не могу понять как перегрузить оператор. Кучу примеров пересмотрел, но все равно не пойму....

Перегрузка операции =
Здравствуйте, в программе вылезает такая ошибка MainUnit.cpp(86): E2034 Cannot convert 'string'...

Перегрузка операции []
Добрый день. Столкнулся с недопониманием, странной ошибкой. #include &lt;iostream&gt; #include...


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

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

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