面向对象程序设计实例_有理数类的运算

面向对象程序设计实例_有理数类的运算

题目: 试定义一个有理数类,该类能提供有理数的加和乘运算

分析:
设计一个类需要考虑两方面的问题:

  • 设计数据成员:
    保存一个有理数即保存它的分子和分母两个整数,但要注意化成最简形式
  • 设计成员函数:
    加减乘除运算的实现,用户可以调用,需设计为共有的

其中需要注意有理数要求是最简形式,如果有时用户给出的不是最简形式,则必须化简,使其成为最简形式。化简的工作在许多地方都需要用到,而且是一个独立的功能,可以将其写成一个函数。由于化简是类内部的工作,有理数的用户不需要调用,这类函数称为工具函数(通常设计为private的)。

代码清单:

  1. 有理数类的定义(头文件)
//文件名:Rational.h
# ifndef rational_h
# define ratioal_h

#include <iostream>
using namespace std;

class Rational {
private:
	int num;//分子
	int den;//分母
	void ReductFraction();//化简函数

public:
	void create(int n, int d) { num = n; den = d; ReductFraction(); }
	void add(const Rational& r1, const Rational& r2);//r1+r2
	void multi(const Rational& r1, const Rational& r2);//r1*r2
	void display() { cout << num << "/" << den; }
};

#endif
  1. 函数的实现
//文件名:Rational.cpp
# include "Rational.h"

//add函数将r1和r2相加,结果存于调用该函数的变量中
void Rational::add(const Rational& r1, const Rational& r2) {
	num = r1.num * r1.den + r2.num * r2.den;
	den = r1.den * r2.den;
	ReductFraction();
}

//multi函数将r1和r2相乘,结果存于调用该函数的变量中
void Rational::multi(const Rational& r1, const Rational& r2) {
	num = r1.num * r2.num;
	den = r1.den * r2.den;
	ReductFraction();
}

//ReductFraction()函数实现有理数的化简
//方法:找出num和den的最大公因子,让他们分别除以最大公因子
void Rational::ReductFraction() {
	int tmp = (num > den) ? den : num;
	for (; tmp > 1; --tmp) {
		if (num % tmp == 0 && den % tmp == 0) {
			num /= tmp; den /= tmp; break;
		}
	}
}
  1. 有理数类应用示例
# include<iostream>
# include"Rational.h"

using namespace std;

int main() {
	int n, d;
	Rational r1, r2, r3;

	cout << "请输入第一个有理数的分子和分母:";
	cin >> n >> d;
	r1.create(n, d);

	cout<< "请输入第二个有理数的分子和分母:";
	cin >> n >> d;
	r2.create(n, d);

	r3.add(r1, r2);
	r1.display(); cout << "+"; r2.display();
	cout << "="; r3.display(); cout << endl;

	r3.multi(r1, r2);
	r1.display(); cout << "*"; r2.display();
	cout << "="; r3.display(); cout << endl;

	return 0;
}

运行结果如下图:
面向对象程序设计实例_有理数类的运算

上一篇:Redis - 为何redis集群用哈希槽,而不用一致性哈希?


下一篇:2021年R2移动式压力容器充装考试及R2移动式压力容器充装复审模拟考试