资源描述
c+c+面向对象程序设计面向对象程序设计实验报告实验报告实验序号:8实验项目名称:友元与运算符重载学号姓名专业、班实验地点指导教师实验时间一、实验目的及要求 类是 C+扩展数据类型,可以封装不同类型的数据成员和函数成员,类是面向对象程序设计的基础。本次实验内容包括面向对象的基本概念、构造函数与析构函数,从实际问题抽象出类等,通过实验要求:1、掌握面向对象的基本概念,类的定义方法;2、掌握类成员的访问权限及访问类成员的方法;3、掌握引用概念及应用,引用作为函数参数;4、掌握构造函数与析构函数的意义及使用方法。5、掌握友员函数、友员类的使用,以及运算符重载为成员函数和友元函数的方法。二、实验设备(环境)及要求 V+6.0三、实验内容与步骤1.实现分数类,定义如下:class fractionprivate:int num;/分子int deno;/分母fraction reduction(fraction f);/约分public:fraction()/无参构造函数fraction(int n,int d)/有参构造函数fraction operator+(fraction f);/重载+运算符fraction operator-(fraction f);/重载-运算符fraction operator*(fraction f);/重载*运算符fraction operator/(fraction f);/重载/运算符int frac(fraction f);/取整数部分double frac1(fraction f);/将分数转变成小数void display();/显示分数 ostream&operator(istream&ins,fraction&);/分子分母仅有一位2、实现复数类(Complex),设定重载的运算符-、-=、*=和/=,分别使用成员函数和友元函数各做一遍并测试。实验原理、方法和手段设计思想:类和对象是面向对象程序设计的第一重要概念。因此,首先要掌握类和对象的定义格式;理解构造函数的作用和系统调用机制。四、实验结果与数据处理五、分析与讨论用友元函数作为-=,*=,/=的重载函数时,函数的运算结果无法返回给左边的对象,所以函数的形参应使用对象的引用名。六、教师评语签名:日期:成绩附件:源代码1:#includeusing namespace std;namespace stdclass fractionprivate:int num;/分int deno;/分母public:fraction()num=0;deno=0;fraction(int a,int b);fraction reduction(fraction f);int frac(fraction f);/取整数部分 double frac1(fraction f);/将分数转变成小数 friend fraction operator+(fraction f,fraction k);/重载+运算符 friend fraction operator-(fraction f,fraction k);/重载-运算符 friend fraction operator*(fraction f,fraction k);/重载*运算符 friend fraction operator/(fraction f,fraction k);/重载/运算符 friend ostream&operator(istream&ins,fraction&f);/分子分母仅有一位*/void show();fraction:fraction(int a,int b)num=a;deno=b;fraction fraction:reduction(fraction a)int i;if(a.num%a.deno=0)a.num=a.num/a.deno;a.deno=1;else for(i=2;i=10;i+)if(a.num%i=0)if(a.deno%i=0)a.num=a.num/i;a.deno=a.deno/i;i=i-1;return fraction(a.num,a.deno);void fraction:show()coutendlnum/deno;int fraction:frac(fraction f)/取整数部分 int a;a=f.num/f.deno;return(a);double fraction:frac1(fraction f)double a;a=double(f.num)/double(f.deno);return(a);fraction operator+(fraction f,fraction k)fraction one;one.num=f.num*k.deno+k.num*f.deno;one.deno=f.deno*k.deno;one=one.reduction(one);return one;fraction operator-(fraction f,fraction k)fraction one;one.num=f.num*k.deno-k.num*f.deno;one.deno=f.deno*k.deno;one=one.reduction(one);return one;fraction operator*(fraction f,fraction k)fraction one;one.num=f.num*k.num;one.deno=f.deno*k.deno;one=one.reduction(one);return one;fraction operator/(fraction f,fraction k)fraction one;one.num=f.num*k.deno;one.deno=f.deno*k.num;one=one.reduction(one);return one;ostream&operator(ostream&outs,const fraction&f)outsf.num/(istream&ins,fraction&f)char a;coutendlf.numaf.deno;f=f.reduction(f);return ins;int main()int a;double b;fraction one(1,2),two(2,3),four,five;one.show();two.show();one=one.reduction(one);one.show();a=one.frac(one);b=one.frac1(one);coutendl整数部分为:a;coutendl将分数转变成小数为:b;four=one+two;four.show();four=one-two;four.show();four=one*two;four.show();four=one/two;four.show();coutendlfive;coutfive;coutendl;return(0);运行结果:2:重载函数为类的成员函数:#includeusing namespace std;class complex private:int real,imag;public:complex()real=0;imag=0;complex(int r,int i);complex operator-(complex f);complex operator-=(complex f);complex operator*=(complex f);complex operator/=(complex f);void didplay();complex:complex(int r,int i)real=r;imag=i;complex complex:operator-(complex f)complex one;one.real=real-f.real;one.imag=imag-f.imag;return one;complex complex:operator-=(complex f)real=real-f.real;imag=imag-f.imag;return complex(real,imag);complex complex:operator*=(complex f)real=real*f.real;imag=imag*f.imag;return complex(real,imag);complex complex:operator/=(complex f)real=real/f.real;imag=imag/f.imag;return complex(real,imag);void complex:didplay()coutendlreal=real;coutendlimag=imag;int main()complex one(1,2),two(2,3),a;a=two-one;a.didplay();one-=two;one.didplay();one*=two;one.didplay();one/=two;one.didplay();coutendl;return(0);运行结果:重载函数为类的成员函数:#includeusing namespace std;namespace stdclass complex private:int real,imag;public:complex()real=0;imag=0;complex(int r,int i);friend complex operator-(complex f,complex k);friend complex operator-=(complex&f,complex&k);friend complex operator*=(complex&f,complex&k);friend complex operator/=(complex&f,complex&k);void didplay();complex:complex(int r,int i)real=r;imag=i;complex operator-(complex f,complex k)complex one;one.real=f.real-k.real;one.imag=f.imag-k.imag;return one;complex operator-=(complex&f,complex&k)return complex(f.real-=k.real,f.imag-=k.imag);complex operator*=(complex&f,complex&k)return complex(f.real*=k.real,f.imag*=k.imag);complex operator/=(complex&f,complex&k)return complex(f.real/=k.real,f.imag/=k.imag);void complex:didplay()coutendlreal=real;coutendlimag=imag;int main()complex one(1,2),two(2,3),a;a=two-one;a.didplay();one-=two;one.didplay();one*=two;one.didplay();one/=two;one.didplay();coutendl;return(0);运行结果:
展开阅读全文