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

перегрузка операций - C++

Восстановить пароль Регистрация
 
karakul
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 5
15.03.2013, 15:08     перегрузка операций #1
Напишите программу, в которой используется класс Int, имитирующий стандартный класс Int. Перегрузите четыре целочисленных арифметических операции /, +, -, *. Так чтобы их можно было использовать для операций с объектами класса Int. Если результат выходит за границы типа int (в 32 разрядной системе) имеющие значение от -2 147 483 648 до 2 147 483 648, то операция должна послать сообщение об ошибках.

Операции я перегрузил.. а вот с частью "Если результат выходит за границы типа int (в 32 разрядной системе) имеющие значение от -2 147 483 648 до 2 147 483 648, то операция должна послать сообщение об ошибках." траблы..

буду очень благодарен за помощь..

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
#include <conio.h>
#include <iostream>
#include <windows.h>
using namespace std;
 
class Int
{ 
    int x;
public:
    Int (int X=0)
    {
        x=X;
    } 
    void show()
    {
        cout<<x;
    }
    Int &operator+ (Int &a)
    {
 
        Int plus(0);
        plus.x=x+a.x;
        return plus;
    }
    Int &operator/ (Int &a)
    {
        Int del(0);
        if (a.x==0)
            cout<<"Delit' na nol' nel'zya\n";
        else
            del.x=x/a.x;
        return del;
    }
    Int &operator- (Int &a)
    {
        Int minus(0);
        minus.x=x-a.x;
        return minus;
    }
    Int &operator* (Int &a)
    {
        Int umnoj(0);
        umnoj.x=x*a.x;
        return umnoj;
    }
};
 
void main()
{
    Int a,b,c;
    int i,z,y;
    do
    {
        cout<<"\nVybirite deystvie:\n1-zadat' znachenie peremennoy\n2-pereyti k vyboru operacii\n0-vyhod\n";
        cin>>i;
        switch(i)
        {
        case 1:
            cout<<"Vvedite zcheniya peremennyh:\n";
            cout<<"a=";
            cin>>z;
            a = Int(z);
            cout<<"\nb=";
            cin>>y;
            b = Int(y);
            break;
        case 2:
            cout<<"\nVybirite operaciu:\n1-umnojenie\n2-delenie\n3-vychitanie\n4-slojenie\n";
            cin>>i;
            switch(i)
            {
            case 1:
                c=a*b;
                c.show();
                break;
            case 2:
                c=a/b;
                c.show();
                break;
            case 3:
                c=a-b;
                c.show();
                break;
            case 4:
                c=a+b;
                c.show();
                break;
            }
            break;
        }
    }
    while(i);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 15:08     перегрузка операций
Посмотрите здесь:

C++ перегрузка операций С++
C++ Перегрузка операций << и >>
C++ перегрузка операций
Перегрузка операций C++
C++ Перегрузка операций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
srg_btl
33 / 33 / 2
Регистрация: 21.02.2013
Сообщений: 90
15.03.2013, 15:30     перегрузка операций #2
Можешь сравнивать полученый результат с входными данными.
Напр.: инт у нас 1 байт ( -128 до 127 ) и есть 2 числа 100 и 30, если ты их добавишь то получиться -126, тут сразу видно что ты вышел за границы
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
15.03.2013, 15:47     перегрузка операций #3
http://msdn.microsoft.com/en-us/library/ms972705.aspx
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
15.03.2013, 17:59     перегрузка операций #4
Цитата Сообщение от karakul Посмотреть сообщение
C++
1
2
3
4
5
6
Int &operator+ (Int &a) 
{ 
Int plus(0); 
plus.x=x+a.x; 
return plus; 
}
наверное все таки так
C++
1
2
3
4
5
Int &operator+ (Int &a) 
{ 
x=x+a.x; 
return *this; 
}
Добавлено через 4 минуты
насчет переполнения попробуй что то вроде
C++
1
2
3
4
5
6
7
res = a+b;
if(a>=0&&b>=0)
   if(res<a&&res<b)
      cout<<"overflow";
if(a<0&&b<0)
  if(res>a&&res>b)
     cout<<"overflow"
для других операций доработай знаки и условия
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
22.03.2013, 13:44     перегрузка операций #5
прошу прощения косяк сложение вот так должно выглядеть
C++
1
2
3
4
5
6
Int operator+ (Int &a) //без & (для арифм операций возвращается по значению)
{ 
Int plus(0); 
plus.x=x+a.x; 
return plus; 
}
Yandex
Объявления
22.03.2013, 13:44     перегрузка операций
Ответ Создать тему
Опции темы

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