Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Разработать реализацию класса Fraction в файле “Fraction.cpp”



/*

Разработать реализацию класса 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»

mybiblioteka.su - 2015-2024 год. (0.007 сек.)