面向对象程序设计实验——编写Rational类
实验任务与要求
编写一个表示有理数的类Rational。(有理数就是分数,包含分子与分母,均为整数)。要求:
1)定义一个命名空间Numeric,在该空间中定义类Rational;
2)编写默认构造函数,构造一个有理数0;
3)编写带参数列表的构造函数Rational (int, int ),要求使用初始化列表;
4)编写复制构造函数;
5)编写赋值操作=;
6)编写四个友元函数add、sub、mul、div,对两个Rational对象表示的有理数分别进行
相加、相减、相乘、相除运算;
(例:Rational x(1,2),y(1,3);分别表示有理数,则Rational z = add(x,y);之后,z表示)
7)重载上述四个函数,实现有理数与整数的相加、相减、相乘、相除运算;
(例:Rational x(1,2);表示有理数,则 Rational z = add(x,1),之后,z表示)
8)编写成员函数getValue(),返回用浮点数表示的有理数,要求写成常函数。
(例:Rational x(1,2);表示有理数,则x.getValue()返回0.5)
9)编写友元函数lessThan,比较两个有理数的大小,返回bool类型。
(例:Rational x(1,2),y(1,3);则bool b = lessThan(x,y);之后b为false)
10)编写main函数,使用using namespace Numeric;来访问Numeric::Rational类。
编写代码测试Rational类。
11)在main函数中,随机生成10个有理数,形成一个有理数数组,
并利用lessThan函数以及任意一种排序算法,对这10个有理数进行从小到大排序,输出排序结果。
代码解析
定义一个命名空间Numeric
下面展示代码片段 Numeric
。
// 命名空间内定义类及类的成员函数
// 本文简化设计,将函数体一同编写进类中
// 为代码清晰,可自定义头文件
namespace Numeric {
/*表示有理数的类*/
class Rational {
public:
// 默认构造函数,构造一个有理数0
Rational() :numerator(0), denominator(1) {
}
// 带参数列表的构造函数,要求使用初始化列表
Rational(int _a, int _b) :numerator(_a), denominator(_b) {
}
// 复制构造函数
Rational(const Rational& rational) {
}
// 编写赋值操作 =
Rational& operator=(const Rational& rational) {
}
private:
int numerator; // 分子
int denominator; // 分母
public:
// 分数化简,参数为一个Rational对象
Rational& fractionSimplify() {
}
// 有理数相加,参数为两个Rational对象
friend Rational add(const Rational& x, const Rational& y) {
}
// 重载函数,实现有理数与整数的相加
friend Rational add(const Rational& x, const int y) {
}
// 有理数相减,参数为两个Rational对象,
friend Rational sub(const Rational& x, const Rational& y) {
}
// 重载函数,实现有理数与整数的相减
friend Rational sub(const Rational& x, const int y) {
}
// 有理数相乘,参数为两个Rational对象,
friend Rational mul(const Rational& x, const Rational& y) {
}
// 重载函数,实现有理数与整数的相乘
friend Rational mul(const Rational& x, const int y) {
}
// 有理数相除,参数为两个Rational对象,
friend Rational