if (f.num==0) { } intn,d;
//公式:(num/den) * (f.num/f.den) =(num*f.den)/(den*f.num)
/* 代码段6 */
cout<<\除数不能为0\exit(1);
return Fraction(n,d); }
//友元函数的定义
int operator ==(Fraction & f1,Fraction & f2) { }
int operator !=(Fraction & f1,Fraction & f2) { }
//可能有多行代码
int operator >=(Fraction & f1,Fraction & f2) {
Fraction temp; temp=f1-f2; return代码行5; Fraction temp; temp=f1-f2; if (temp.num==0) else
return 0; return 1;
/* 代码段7 */
}
int operator <=(Fraction & f1,Fraction & f2) { }
int operator <(Fraction & f1,Fraction & f2) { }
int operator >(Fraction & f1,Fraction & f2) { }
ostream& operator<<( ostream&os,const Fraction & f) { }
if (f.num==0 || f.den==1) else
代码行6; //以\的形式输出 cout<
return 0; return 1;
return代码行7;
istream& operator>>( istream& is, Fraction & f) {
string s;
is >> s; //将\作为字符串读入, \中间不能有空格 intpos = s.find(\
string sTmp =代码行8; //分离出代表实部的字符串
f.num= atoi(sTmp.c_str());//atoi库函数能将const char*指针指向的内容转换成int sTmp = s.substr(pos+1, s.length()-pos-1); //分离出代表虚部的字符串 f.den = atoi(代码行9); }
//main.cpp内容
#include
代码行10//包含头文件fraction.h using namespace std;
int main() {
//分数进行四则运算
cout< /* 代码段8 */ 代码行11;//定义分数类对象f1、f2 cout<<\请以x/y形式分别输入两个分数:\cout<<\代码行12;//输入f1 cout<<\cin>>f2; cout< cout< //分数的关系运算 /* 代码段9 */ } cout<<\ ? 结果: \cout<<\ ? 结果: \cout<<\ ? 结果: \cout< return 0; 阅读程序代码,回答相关问题: ①为什么在fraction.h中要使用#ifndef __FRACTION_H_...#define __FRACTION_H__...#endif条件编译指令? 防止头文件被重复引用。 ②类的成员函数在类外定义时应如何书写? 返回值类型 类名::成员函数名(形式参数表) { // 函数体 } ③类的构造函数、析构函数各有什么作用?书写时有什么不同? 构造函数的作用:对象创建时用特定值去初始化对象(自动完成) 析构函数的作用:对象消亡前做一些清除工作(自动完成) ④运算符重载有哪两种方法?它们有什么不同? 成员函数和友元函数。不同点: 成员函数:运算符函数的参数个数要比操作数的个数少一个,即双目运算符仅有一个参数,单目运算符无参数。 友元函数:运算符函数的参数个数与操作数的个数一样多。 ⑤互为相反式的关系运算符,在重载时如何书写最为简便? 取反“!”。 ⑥重载<<、>>运算符时有什么需要注意的地方? (1)只能用友元函数方法重载,不能用成员函数方法重载; (2)有两个参数,一个是流对象(输出流类为ostream,输入流类为istream),另一个是用户自定义类型的对象。为了能实现对象的连续输入、输出,返回对象也必须是流对象,并且参数、返回对象均为引用类型。调用时,这里的流对象也就成了cout或cin的别名; (3)通常,使用<<运算符输出时,对于输出内容不作修改,可以加上const关键字对其进行修饰。 (3)调试、运行程序. 6、考核形式 根据实验报告质量,给予综合评分。 7、实验报告要求 实验报告除必备的实验目的、实验要求等要素外,应包含以下内容: (1) 说明程序测试的过程和结果; (2) 说明程序的运行流程; (3) 填写9处代码段、12行代码内容; (4) 写出6个问题的答案; (5) 所有的思考题答案。 8、思考题 (1) 类的声明与实现分离有什么优点? (2) 类的对象存储内容是什么?怎样得到对象存储空间的大小? (3) 为什么要重载运算符?它有什么特点? (4) Fraction对象的运算是否准确? (5) 系统定义的int类型范围不大,若要定义长度为100位的整数,该从哪些方面考虑?