问题及代码
友元函数提供了一种非成员函数访问私有数据成员的途径,模板类使类中的数据成员的类型变得灵活,这两种技术可以结合起来用。要求在前面方案的基础上支持用友员函数实现的加法。
/*
* Copyright (c) 2015, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:辛彬
* 完成日期:2015 年 4 月 12 日
* 版 本 号:v1.0
*/
#include<iostream>
using namespace std;
template<class numtype>
class Complex
{
public:
Complex(){}
Complex(numtype xx,numtype yy):x(xx),y(yy){}
Complex complex_add(Complex &a);
void display();
template<class T>
friend Complex<T> add_complex(Complex<T> &a,Complex<T> &b);
private:
numtype x;
numtype y;
};
template<class numtype>
Complex<numtype> add_complex(Complex<numtype> &a,Complex<numtype> &b)
{
Complex<numtype> t;
t.x=b.x+a.x;
t.y=b.y+a.y;
return t;
}
template<class numtype>
Complex<numtype> Complex<numtype>::complex_add(Complex<numtype> &a)
{
Complex t;
t.x=x+a.x;
t.y=y+a.y;
return t;
}
template<class numtype>
void Complex<numtype>::display()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
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;
}
运行结果:
学习感悟:彻底晕了。。。。