|
/*
Разработать реализацию класса Fraction в файле “Fraction.cpp”
В файле “Main.cpp” протестировать все методы этого класса.
Проиллюстрировать возможность использования всех методов и константных объектов
в качестве операндов в операциях.
*/
//“Fraction.h”
#include <iostream>
using namespace std;
class Fraction {
private:
/**
* n - числитель (numerator)
* d - знаменатель (denominator)
* Эта пара всегда поддерживается в "канонической форме"
* 1. в числителе знак (знаменатель всегда больше 0)
* 2. n и d - взаимнопростные
* Этот инвариант поддерживается методом simplify()
*/
int n, d;
void simplify();
public:
class BadFraction {};
/**
* Конструктор с параметрами по умолчанию, может использоваться
* неявно (для того, чтобы можно было записать 1+Fraction(1,2)
*/
Fraction(int n = 0, int d = 1);
int getNum() const{return n;}
int getDenom() const{return d;}
//Унарные операции
//variant 1 как член класса
Fraction operator -()const;
// Fraction& operator -(){ n=-n;return *this; }
//variant 2 как дружественная функция
//friend Fraction operator -(const Fraction& b);
//variant 3 как обычная функция, не член класса, объявляется
//и описывается отдельно вне класса
//Fraction operator -(const Fraction& b);
Fraction operator!()const;
//перегрузка инкремента(декремента)
//variant 1
Fraction& operator ++();//++(++(++f))) или можно так ++++++f
Fraction operator ++(int);
//Оператор присваивания
Fraction& operator =(const Fraction& b);
//Составные операторы присваивания
Fraction& operator+=(const Fraction& b);//можно f1+=f2+=f2;
Fraction& operator-=(const Fraction& b);//f1-=f2;
Fraction& operator*=(const Fraction& b);//f1*=f2;
Fraction& operator/=(const Fraction& b);//f1/=f2;
Fraction& operator+=(int b);//f1+=5;
Fraction& operator-=(int b);//f1-=3;
Fraction& operator*=(int b);//f1*=-2;
Fraction& operator/=(int b);//f1/=-9;
//Бинарные операции
Fraction operator+(const Fraction& b)const;//f4=f1+f2+f3;
// friend Fraction operator+(const Fraction& b1, const Fraction& b2)const;
// Обычная функция
// Fraction operator+(const Fraction& b1, const Fraction& b2)const;
//f1,f2,f3 могут быть константными объектами
//константный метод работает с константными объектами и неконстантными объектами
Fraction operator-(const Fraction& b)const;//f3=f1-f2;
Fraction operator*(const Fraction& b)const;//f3=f1*f2;
Fraction operator/(const Fraction& b)const;//f3=f1/f2;
// Арифметические операции с объектом и числом слева
Fraction operator+(int b)const;//f3=f1+5;
Fraction operator-(int b)const;//f3=f1-(-7);
Fraction operator*(int b)const;//f3=f1*(-8);
Fraction operator/(int b)const;//f3=f1/7;
// Арифметические операции с объектом и числом справа
friend Fraction operator+(int a,const Fraction& b);//f2=5+f1;
friend Fraction operator-(int a,const Fraction& b);
friend Fraction operator*(int a,const Fraction& b);
friend Fraction operator/(int a,const Fraction& b);
bool operator==(const Fraction& b)const;
bool operator<(const Fraction& b)const;
// перегрузка операций << и >>
// ввод: 1/2 вывод 1/2
friend ostream& operator<<(ostream& so, const Fraction& f);
friend istream& operator>>(istream& si, Fraction& f);
// оператор преобразования типа - конвертер, член класса
operator double(){
return double(n)/d;
}
};
Дата добавления: 2015-11-05; просмотров: 26 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
— Как всегда — у нас новый лорд Лукан[Лорд Лукан — символ неуловимого преступника. Лорд Лукан по прозвищу Счастливчик, британский аристократ, подозреваемый в убийстве гувернантки своих детей и 18 страница | | | Киношкола «Pro-vision Cinema» |