复数类_所有函数都写在类的外部

来源:互联网 发布:python多进程框架 编辑:程序博客网 时间:2024/05/16 04:37

传智扫地僧课程学习笔记。


后面的过程很复杂,

但是结论很简单,就是不要乱用友元函数,特别是与模板在一起的时候,

这里<<操作符的处理还好,不复杂,而且这个只能用友元函数实现,

但是mysub要是在内的外部实现,就好复杂,所以最好不要这样用,

#include "iostream"  using namespace std; template <typename T>class complex{public:complex( T a, T b);void printcom();complex operator+(complex &c2);complex operator-(complex &c2);friend ostream& operator<<<T>( ostream &out, complex &c3);friend complex mysub( complex &c1, complex &c2){complex tmp( c1.a - c2.a, c1.b-c2.b);return tmp;}private:int a;int b;};template <typename T>complex<T>::complex( T a, T b){this->a = a;this->b = b;}template <typename T>void complex<T>::printcom(){cout<<"a:"<<a<<" b:"<<b<<endl;}template <typename T>complex<T> complex<T>::operator+(complex<T> &c2){complex tmp( a+c2.a, b+c2.b);return tmp;}template <typename T>complex<T> complex<T>::operator-(complex<T> &c2){complex tmp( a-c2.a, b-c2.b);return tmp;}template <typename T>ostream& operator<<( ostream &out, complex<T> &c3){out<<"a:"<<c3.a<<"+"<<" b:"<<c3.b<<endl;return out;}void main()  {  complex<int> c1( 1, 2);complex<int> c2( 3, 4);complex<int> c3 = c1 + c2;complex<int> c4 = mysub( c1, c2);cout<<c4<<endl;cout<<c3<<endl;    system("pause");  }  


0 0
原创粉丝点击