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

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

Войти
Регистрация
Восстановить пароль
 
Alex1205
6 / 6 / 1
Регистрация: 14.01.2011
Сообщений: 81
#1

С помощью перегрузки операторов складывать, вычитать натуральные дроби - C++

10.06.2011, 00:27. Просмотров 500. Ответов 3
Метки нет (Все метки)

Господа, делали лабу, задачка на дроби. С помощью дружественного класса нужно было складывать, вычитать натуральные дроби. Вроде что-то наваял(сам,честно), но у меня вопрос: можно ли сделать подобное с помощью перегрузки операторов?

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
#include<iostream>
#include<string.h>
using namespace std;
 
class Fract
{
private:
    int top,bottom;
public:
    Fract(int t = 0,int b = 1)
    {
        top = t;
        bottom = b;
    }
    friend class FractFriend;
};
 
 
class FractFriend
{
public:
Fract F;
public:
    void Set(int top,int bottom);
    char* GetN();
    float GetF();
    Fract Add(Fract F2);
    Fract Sub(Fract F2);
};
 
void FractFriend::Set(int top,int bottom)
{
    F.top = top;
    F.bottom = bottom;
}
float FractFriend::GetF()
{
    return (float)F.top/F.bottom;
}
Fract FractFriend::Add(Fract F2)
{
    Fract tmp;
    tmp.top=F.top*F2.bottom + F2.top*F.bottom;
    tmp.bottom = F.bottom*F2.bottom;
    return tmp;
}
Fract FractFriend::Sub(Fract F2)
{
    Fract res;
    res.top=F.top*F2.bottom - F2.top*F.bottom;
    res.bottom = F.bottom*F2.bottom;
    return res;
}
char* FractFriend::GetN()
{
    char* tmp = new char[100];
    char a[50];
    itoa(F.top,a,10);
    strcpy(tmp,a);
    strcat(tmp,"/");
    itoa(F.bottom,a,10);
    strcat(tmp,a);
    return tmp;
}
void main()
{
FractFriend F1;
F1.Set(3,4);
cout<<F1.GetN()<<" "<<"\t";
cout<<F1.GetF()<<" "<<"\t";
 
FractFriend S2;
S2.Set(1,2);
cout<<S2.GetN()<<" "<<"\t";
cout<<S2.GetF()<<" "<<"\t";
FractFriend res;
res.F = F1.Add(S2.F);
cout<<"\n\n";
cout<<" Addition result of two fractions is: "<<res.GetN()<<"\n";
res.F = F1.Sub(S2.F);
cout<<" Substruction result of two fractions is: "<<res.GetN()<<"\n";
cout<<"\n\n";
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2011, 00:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С помощью перегрузки операторов складывать, вычитать натуральные дроби (C++):

Написать программу проверки умения складывать и вычитать числа в пределах 100. Программа должна вывести 10 примеров и выставить оценку за 10 правильны - C++
Написать программу проверки умения складывать и вычитать числа в пределах 100. Программа должна вывести 10 примеров и выставить оценку за...

Перегрузки операторов. В чем ошибка? - C++
Доброго времени суток) В ВУЗе задали задание: написать класс Многочлен, и описать в нем методы сложения, вычитания, произведения...

После перегрузки операторов не работает cout - C++
Здравствуйте. После использования перегруженного оператора + перестает работать оператор вывода. Почему такое возможно? Или у меня ошибка? ...

Разработка алгоритмов и программ по реализации перегрузки операторов - C++
Разработка алгоритмов и программ по реализации перегрузки операторов!!!!!!!!!!!!!! условие: Описать класс одномерный массив (вектор)...

Использование перегрузки операторов для комплексного числа - C++
Перезагрузить функции для разных типов входных данных, или создать шаблоны функций, или переопределить операции для указанных пользователем...

Использование функций-членов для перегрузки унарных операторов - C++
Добрый день уважаемые коллеги. Возник вопрос. как работают эти строки? three_d operator+(three_d op2);// оператор ор1 передается...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
10.06.2011, 00:41 #2
можно.
Fract FractFriend::Add(Fract F2);
изменится на
C++
1
2
3
4
5
6
7
Fract Fract::operator+(const Fract& r_obj) {
Fract temp(0,0);
temp.top=this->top+r_obj.top;
temp.bottom=this->bottom+r_obj.bottom;
 
return temp;
}
по аналогии с operator-()
1
Alex1205
6 / 6 / 1
Регистрация: 14.01.2011
Сообщений: 81
10.06.2011, 17:23  [ТС] #3
а если так..что изменится?

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
#include<iostream>
#include<string.h>
using namespace std;
 
class Fract
{
private:
    int top,bottom;
public:
    Fract(int t = 0,int b = 1)
    {
        top = t;
        bottom = b;
    }
    friend class FractFriend;
};
 
 
class FractFriend
{
public:
Fract F;
public:
    void Set(int top,int bottom);
    char* GetN();
    float GetF();
    Fract operator+(Fract F2);
    Fract operator-(Fract F2);
};
 
void FractFriend::Set(int top,int bottom)
{
    F.top = top;
    F.bottom = bottom;
}
float FractFriend::GetF()
{
    return (float)F.top/F.bottom;
}
Fract FractFriend::operator+(Fract F2)
{
    Fract tmp;
    tmp.top=F.top*F2.bottom + F2.top*F.bottom;
    tmp.bottom = F.bottom*F2.bottom;
    return tmp;
}
Fract FractFriend::operator-(Fract F2)
{
    Fract res;
    res.top=F.top*F2.bottom - F2.top*F.bottom;
    res.bottom = F.bottom*F2.bottom;
    return res;
}
char* FractFriend::GetN()
{
    char* tmp = new char[100];
    char a[50];
    itoa(F.top,a,10);
    strcpy(tmp,a);
    strcat(tmp,"/");
    itoa(F.bottom,a,10);
    strcat(tmp,a);
    return tmp;
}
void main()
{
FractFriend F1;
F1.Set(1,2);
cout<<F1.GetN()<<" "<<"\t";
cout<<F1.GetF()<<" "<<"\t";
 
FractFriend S2;
S2.Set(1,2);
cout<<S2.GetN()<<" "<<"\t";
cout<<S2.GetF()<<" "<<"\t";
FractFriend res;
res.F = F1.operator+(S2.F);
cout<<"\n\n";
cout<<" Addition result of two fractions is: "<<res.GetN()<<"\n";
res.F = F1.operator-(S2.F);
cout<<" Substruction result of two fractions is: "<<res.GetN()<<"\n";
cout<<"\n\n";
}
0
Mars30
12 / 12 / 1
Регистрация: 16.12.2010
Сообщений: 266
10.06.2011, 22:30 #4
Можно сделать с помощью перегрузки операторов... Сама долго парилась с этим
0
Вложения
Тип файла: rar drob1.rar (614 байт, 20 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2011, 22:30
Привет! Вот еще темы с ответами:

Как выставить failbit внутри тела перегрузки операторов ввода/вывода - C++
Доброй ночи всем! Есть вот такой код main: for(Sales_item item; std::cin &gt;&gt; item; std::cout &lt;&lt; item &lt;&lt; std::endl); И такая...

Выполнить объединение двух строк с помощью перегрузки оператора (*) - C++
#define _CRT_SECURE_NO_WARNINGS #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; class String { char *str; int...

Как узнать тип вводимых данных с помощью перегрузки функции? - C++
Такое условие задачки: Пользователь вводит данные, а ему программа говорит, какой тип этих данных. Нужно сделать это с помощью перегрузки...

Функции для ввода/вывода массивов и матриц с помощью шаблонов и перегрузки - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; template&lt;class T&gt; int mass(T mas, T iSize = sizeof(mas) /...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.06.2011, 22:30
Ответ Создать тему
Опции темы

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