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

/*
*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:田成琳
*完成日期:2014  年 4 月 8 日
*版本号:v1.0
*对任务及求解方法的描述部分:
*输入描述:无
*问题描述:复数类模板
          (1)要求类成员函数在类外定义。
        (2)在此基础上,再实现减法、乘法和除法

*程序输出:- -
*问题分析:
*算法设计:
*/
#include<iostream>
using namespace std;
template<class A>  //声明类模板A
class 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&);//成员函数,返回类型为Complex
		Complex 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;  
}  


运行结果:

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值