第七周项目5(拓展)-复数类模板加友元函数

来源:互联网 发布:tv版看电影软件 编辑:程序博客网 时间:2024/05/17 07:40
/**程序的版权和版本声明部分:*Copyright(c)2014,烟台大学计算机学院学生*All rights reserved.*文件名称:*作者:田成琳*完成日期:2014  年 4 月 8 日*版本号:v1.0*对任务及求解方法的描述部分:*输入描述:无*问题描述:复数类模板          (1)要求类成员函数在类外定义。        (2)在此基础上,再实现减法、乘法和除法*程序输出:- -*问题分析:*算法设计:*/#include<iostream>using namespace std;template<class A>  //声明类模板Aclass Complex{public:template<class A1>friend Complex<A1> add_complex(Complex<A1> &c1,Complex<A1> &c2);Complex(){a=0;b=0;}Complex(A x,A y){a=x;b=y;}Complex complex_add(Complex&);//成员函数,返回类型为ComplexComplex complex_dec(Complex&);Complex complex_mul(Complex&);Complex complex_div(Complex&);void display();private:A a,b;};template<class A>Complex<A> Complex<A>::complex_add(Complex<A> &c2)     {  //成员函数的类外定义。Complex<A> c;      c.a=a+c2.a;  c.b=b+c2.b;  return c;  }  template<class A>     Complex<A> Complex<A>::complex_dec(Complex<A> &c2)     {  Complex<A> c;      c.a=a-c2.a;  c.b=b-c2.b;  return c;  }  template <class A>      Complex<A> Complex<A>::complex_mul(Complex <A> &c2)        {            Complex <A> c;            c.a=a*c2.a-b*c2.b;            c.b=b*c2.a+a*c2.b;            return c;      }    template <class A>      Complex<A> Complex<A>::complex_div(Complex <A> &c2)        {            Complex <A> c;            A d=c2.a*c2.a+c2.b*c2.b;      c.a=(a*c2.a+b*c2.b)/d;             c.b=(b*c2.a-a*c2.b)/d;            return c;      }  template <class A> void Complex<A>::display( )     {        cout<<a<<"+"<<b<<"i"<<endl;  }template<class A> Complex<A> add_complex(Complex <A> &c1,Complex <A> &c2){Complex<A> c;c.a=c1.a+c2.a;c.b=c1.b+c2.b;return c;}int main( )  {      Complex<int> c1(3,4),c2(5,-10),c3;      c3=c1.complex_add(c2);  //调用成员函数支持加法运算,有一个形参      cout<<"c1+c2=";      c3.display( );      Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6;      c6=c4.complex_add(c5);  //调用成员函数支持加法运算,有一个形参      cout<<"c4+c5=";      c6.display();      Complex<int> c7;      c7=add_complex(c1,c2);  //调用友员函数支持加法运算,有两个形参      cout<<"c1+c2=";      c7.display();      Complex<double> c8;      c8=add_complex(c4,c5);  //调用友员函数支持加法运算,有两个形参      cout<<"c4+c5=";      c8.display();      return 0;  }  


运行结果:

 

心得体会:真是麻烦。。。

0 0