C++有理数类设计
有理数类主要功能设计
之前用C语言设计了有理数数据类型C语言实现有理数数据类型(有理数库),这里再用C++做个有理数类。有理数类的功能就比C语言的有理数数据类型功能强多了,主要就是运算符重载。
- 有理数类,能实现以m/n形式的输入输出,支持加减乘除运算;
- 支持加赋,减赋,乘赋,除赋,判等,大于,小于运算;
- 也支持和普通double类型混合进行以上这些运算;
- 运算结果均已化简;
- 注意由于内部分子分母均是int型,乘除法容易溢出。
- 设计除法的除数为0时,会报错退出。
以下是有理数类头文件rational_oop.h:
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
using namespace std;
class Rational
{
private:
int fenzi, fenmu;
void simply();//化简
bool negative() const;//判断是否是负数
public:
Rational(int numerator = 0, int denominator = 1);//构造函数
Rational(const double n);//类型转换构造函数
Rational(const Rational & ra);//复制构造函数
//~Rational();没有动态分配,默认析构就行
Rational & operator =(const Rational & ra);
Rational & operator =(const double & n);//使有理数类对象能被double类型赋值
//以下20个函数使有理数类对象能和double类型混合加减乘除和赋值
Rational operator +(const Rational & ra);
Rational operator -(const Rational & ra);
Rational operator *(const Rational & ra);
Rational operator /(const Rational & ra);
Rational operator +(const double & n);
Rational operator -(const double & n);
Rational operator *(const double & n);
Rational operator /(const double & n);
friend Rational operator +(const double & n, const Rational & ra);
friend Rational operator -(const double & n, const Rational & ra);
friend Rational operator *(const double & n, const Rational & ra);
friend Rational operator /(const double & n, const Rational & ra);
Rational & operator +=(const Rational & ra);
Rational & operator -=(const Rational & ra);
Rational & operator *=(const Rational & ra);
Rational & operator /=(const Rational & ra);
Rational & operator +=(const double & n);
Rational & operator -=(const double & n);
Rational & operator *=(const double & n);
Rational & operator /=(const double & n);
int GetFenzi() {
return fenzi; }
int GetFenmu() {
return fenmu; }
void Set(int numerator, int denominator) {
fenzi = numerator; fenmu = denominator; }
//重载强制类型转换运算符,使得凡是应该出现double型的地方,均可以由有理数类对象替代。比如,可以使得
//有理数类对象和普通double型比较大小成为可能
operator double();
//支持以m/n形式的有理数类对象输入输出,负号会显示在前面。
friend ostream & operator <<(ostream & os, const Rational