1

Тема: C++ , потрібна допомога(

Була поставлена задача перегрузити  оператори +,++,+=,=,<,> , але пороблема в мене виникла не в цьому. Побудувавши вже цілу програму, я помітив, що вона працює некоректно. Відповідно, протестувавши покроково, я зрозумів, що якимось чудом число змінної b з об'єкту result, в мене записується в змінну b об'єкту First. Хто може, підкажіть де я лоханувся в коді? Буду вдячний ...

#include <iostream>
#include <locale>
#include <locale.h>

using namespace std;

void AllActions()
{
    int x, y, z;
    cout << "Введіть три числа (кількість сторін кожного грального кубика) " << endl; cin >> x >> y >> z;
    class CDice
    {
    public:
        int b, num;
        CDice(int x, int io) :b(x), num(io) {}
        CDice() :b(0) {}
        int input() { b = rand() % b + 1; return b; }
        void output() { cout << "Бали кубика № " << num << " = " << input() << endl; }
        CDice &operator + (CDice &plus) { this->b = this->b + plus.b; return *this; }
        CDice &operator - (CDice &minus) { this->b = (this->b - minus.b); return *this; }
        CDice &operator ++ (int) { this->b++; return *this; }
        CDice &operator = (CDice &equal) { this->b = equal.b; return *this; }
        CDice &operator += (const CDice & v) { this->b = this->b + v.b; return *this; }
        bool operator < (CDice &val) { return (this->b < val.b); }
        bool operator > (CDice &val) { return (this->b > val.b); }
    };
    CDice First(x, 1), Second(y, 2), Third(z, 3), result(0, 0);

    int choice;
    while (true)
    {
        cout << "=====================" << endl;
        cout << "Будь ласка, виберіть дію" << endl;
        cout << "=====================" << endl;
        cout << "Виберіть 1, якщо хочете киути кубики" << endl;
        cout << "Виберіть 2, якщо хочете знайти суму балів" << endl;
        cout << "Виберіть 3, якщо хочете суму балів збільшити на 1 " << endl;
        cout << "Виберіть 4, якщо хочете (до Суми балів + Бали 2-го кубика) " << endl;
        cout << "Виберіть 5, якщо хочете отримати результат кубика з MAX та MIN кількостями балів " << endl;
        cout << "Виберіть 6, якщо хочете вийти із програми " << endl;
        cin >> choice;
        if (choice == 1)
        {
            First.output();
            Second.output();
            Third.output();
        }
        if (choice == 2)
        {
            result = (First + Second + Third);
            cout << "Сума балів = " << result.b << endl;
            result.b = 0;
        }
        if (choice == 3)
        {
            result = (First + Second + Third);
            result++;
            cout << "(Сума балів) + 1 = " << result.b << endl;
            result.b = 0;
        }
        if (choice == 4)
        {
            result = (First + Second + Third);
            result += Second;
            cout << "Сума балів = сума балів + бали 2-го кубика, що = " << result.b << endl;
            result.b = 0;
        }
        if (choice == 5)
        {
            if (First < Second)
            {
                if (Second < Third)
                {
                    cout << "Max балів - кубик 3 = " << Third.b << endl;
                }
                else
                    cout << "Max балів - кубик 2 = " << Second.b << endl;
            }
            else
            {
                if (First<Third)
                    cout << "Max балів - кубик 3 = " << Third.b << endl;
                else
                    cout << "Max балів - кубик 1 = " << First.b << endl;
            }

            if (First > Second)
            {
                if (Second > Third)
                {
                    cout << "Min балів - кубик 3 = " << Third.b << endl;
                }
                else
                    cout << "Min балів - кубик 2 = " << Second.b << endl;
            }
            else
            {
                if (First>Third)
                    cout << "Min балів - кубик 3 = " << Third.b << endl;
                else
                    cout << "Min балів - кубик 1 = " << First.b << endl;
            }
        }
        if (choice == 6)
        {
            break;
        }
    }
}
int main()

{    
setlocale(0,"uk-UA");
AllActions();
_getwch();
}

2

Re: C++ , потрібна допомога(

METALICOS написав:

я помітив, що вона працює некоректно

А знаєте, завдяки чому ви змогли це помітити? Бо у вас є завдання. А у нас його нема. Відповідно, для нас ця програма - абсолютно коректна, доки ви не поясните, що саме вона мала б робити, а що робить замість цього.

METALICOS написав:

число змінної b з об'єкту result, в мене записується в змінну b об'єкту First

Де саме? Ви розраховуєте, що на ваше питання будуть відповідати телепати, які прочитають ваші думки, чи що хтось на шару проробить всю ту роботу, яку зробили ви, і знайде те саме, що знайшли ви?

Ну і дія операторів + і - якась дивна. Їх би назвати += і -=, то було б чесніше.

Подякували: METALICOS2

3 Востаннє редагувалося METALICOS (30.03.2018 22:20:36)

Re: C++ , потрібна допомога(

Дякую, що звернули увагу на перевантаженння оператора + та - ) Все виправив, все працює)