zoukankan      html  css  js  c++  java
  • 当模版类遇上友元函数

    
    

    //对于重载操作符,这个的函数,在类中声明的时候
    //写成friend Complex operator-<T>(Complex &c1, Complex &c2);
    //在类的外部,写成
    /*
    template<class T>
    Complex<T> operator-(Complex<T> &c1, Complex<T> &c2)
    {
      Complex<T> tmp(c1.Real - c2.Real, c1.Image - c2.Image);
      return tmp;
    }
    */

    //对于一般的函数,则需要提前声明




    #include "iostream" using namespace std; template<class T> class Complex; template<class T> Complex<T> addA(Complex<T> &c1, Complex<T> &c2); template<class T> Complex<T> mySub(Complex<T> &c1, Complex<T> &c2); //对于重载操作符,这个的函数,在类中声明的时候 //写成friend Complex operator-<T>(Complex &c1, Complex &c2); //在类的外部,写成 /* template<class T> Complex<T> operator-(Complex<T> &c1, Complex<T> &c2) { Complex<T> tmp(c1.Real - c2.Real, c1.Image - c2.Image); return tmp; } */ /* 对于普通函数的友元重载,需要提前生成,参考mySub */ template<class T> class Complex { public: Complex(T Real = 0, T Image = 0); Complex(T a); //Complex Complex<T>::operator+(Complex &c1, Complex &c2 ) friend Complex addA<T>(Complex &c1, Complex &c2); friend Complex mySub<T>(Complex &c1, Complex &c2); friend Complex operator-<T>(Complex &c1, Complex &c2); // { // Complex tmp(c1.Real - c2.Real, c1.Image - c2.Image); // return tmp; // } void print(); public: protected: private: T Real, Image; }; template<class T> Complex<T>::Complex(T Real = 0, T Image = 0) { this->Real = Real; this->Image = Image; } template<class T> Complex<T>::Complex(T a) { this->Real = a; this->Image = 0; } template<class T> void Complex<T>::print() { cout << this->Real << " + " << this->Image << endl; }; /* 无法解析的外部符号 " class Complex<float> __cdecl operator+(class Complex<float> &,class Complex<float> &) " (??H@YA?AV?$Complex@M@@AAV0@0@Z),该符号在函数 _main 中被引用 1>E:1-work10-就业班0529day16函数模板课堂操练Debug函数模板课堂操练.exe : fatal error LNK1120: 1 个无法解析的外部命令 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== */ template<class T> Complex<T> addA(Complex<T> &c1, Complex<T> &c2 ) { Complex<T> tmp(c1.Real+c2.Real, c1.Image + c2.Image); return tmp; } template<class T> Complex<T> operator-(Complex<T> &c1, Complex<T> &c2) { Complex<T> tmp(c1.Real - c2.Real, c1.Image - c2.Image); return tmp; } template<class T> Complex<T> mySub(Complex<T> &c1, Complex<T> &c2) { Complex<T> tmp(c1.Real - c2.Real, c1.Image - c2.Image); return tmp; } void main() { Complex<float> c1(1.0, 2.0); Complex<float> c2(3.0, 4.0); c1.print(); Complex<float> c3 =addA(c1,c2); c3.print(); Complex<float> c4 = c1 - c2; c4.print(); Complex<float> c5 = mySub(c1, c2); c5.print(); // system("pause"); }

      

  • 相关阅读:
    MBProgressHUD 的类扩展方法用法
    ios中webview的高级用法(二)
    ios中webview的高级用法
    ios中UIWebview和asiHttprequest的用法
    ios中UIWebview中加载本地文件
    iOS中判断网络是否联网
    iPhone开发之在UINavigationBar上使用UISegmentedControl制作
    ios真机调试步骤
    uitableview分组的数据2中方式
    ios中开始页面做法
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5199554.html
Copyright © 2011-2022 走看看