综合性实验_1:分数类的创建与应用
实验类型:综合性实验 实验学时:2学时
涉及的知识点:类的定义、对象的建立与使用、构造函数、类的友元与运算符重载、输入输出流等
1、实验目的
综合应用类与对象、类的友元与运算符重载、输入输出流等知识,创建分数类,重载常用的运算符,进行输入输出、四则运算和比较大小操作。
分数是我们小学学习的内容,在计算机中如果用浮点数来表示,则可能存在误差,为此,可以定义一个分数类来精确表示。要求定义的分数类Fraction能方便进行输入输出,准确地进行四则运算(+、-、*、/)和关系运算(==、!=、>=、<、<=、>)。实验目的如下:
(1)掌握类的定义方法,包括类的成员声明、构造函数、条件编译指令的使用、类的声明与实现分离的方法等;
(2)掌握使用成员函数、友元函数两种方法重载四则运算符、关系运算符和插入运算符(<<)及提取运算符(>>);
(3)掌握对象的创建,并能调用成员函数实现对应功能。
2、实验内容
先定义分数类Fraction,并重载了四则运算符、关系运算符和插入、提取运算符;再在main()函数定义一些对象进行相关运算,加以验证,从而认识“分数类”优势,学会根据实际需要定义数据类型,提高学习面向对象编程技术的自觉性。
3、实验器材设备
安装了WindowsXP(或其他版本的Windows操作系统)和VS2010(或以上版本的Visusl Studio版本)的PC机一台。
4.实验要求
根据给出的实验指导书完成程序部分代码的填写、调试工作。掌握实验指导书中程序的结构,理解其中的关键代码,回答相关问题。 运行效果图:
5、实验步骤
(1)新建一个项目:VC++/win32 控制台程序,创建一个C++项目;
(2)分别创建一个头文件fraction.h和两个C++源文件fraction.cpp、main.cpp,再将对应内容拷贝到相应文件中:
//fraction.h内容 #include
#ifndef __FRACTION_H__ #define __FRACTION_H__
class Fraction { private:
intnum; int den;
//分子 //分母
//标准化分数(即保证分母为正,分子可正可负) //得到m、n的最大公约数
//分数类
void standardize(); intgcd(int m, int n);
public:
代码行1 ;//带2个参数的构造函数,分别给分子、分母赋值,默认值分别为0、1 void simplify();
//分数化简
void print();
//用成员函数重载+、-、*、/ 四则运算符的声明 Fraction operator +(Fraction & f);
/* 代码段1 */
//用友元函数重载==、>=、<=、!、<、>关系运算符的声明 friend int operator ==(Fraction & f1,Fraction & f2); friend int operator !=(Fraction & f1,Fraction & f2);
/* 代码段2 */
//重载<<、>>运算符 代码行2; 代码行3;
}; #endif
//fraction.cpp内容
#include
//成员函数的类外定义 Fraction::Fraction(intn,int d) {
num=n; den=d; if (d==0) {
cout<<\分母不能为\exit(1);
}
}
standardize(); simplify();
//先标准化 //再化简
void Fraction::print()//输出分数 { }
void Fraction::standardize()//标准化,确保分母为正,分子可正可负 { }
int Fraction::gcd(int m, int n) {
m=(m>=0 ? m:-m); n=(n>=0 ? n:-n); int r=m % n;
/* 代码段3 */
}
void Fraction::simplify() {
//分数化简
//取正数 //取正数
//辗转相除法求最大公约数
if (den<0) { }
num=-num; den=-den;
//分子、分母同乘于-1
if (num==0 || den==1) else
cout< int r=代码行4; } Fraction Fraction::operator +(Fraction & f) { intn,d; //公式:num/den + f.num/f.den =(num*f.den+den*f.num)/(den*f.den) /* 代码段4 */ } Fraction Fraction::operator -(Fraction & f) { intn,d; //公式:num/den - f.num/f.den =(num*f.den-den*f.num)/(den*f.den) /* 代码段5 */ } Fraction Fraction::operator *(Fraction & f) { } Fraction Fraction::operator /(Fraction & f) { intn,d; //公式:num/den * f.num/f.den =(num*f.num)/(den*f.den) n=num*f.num; d=den*f.den; return Fraction(n,d); num=num/r; den=den/r;