zoukankan      html  css  js  c++  java
  • 函数和函数模版在一个。cpp中的情况!(除了左移和右移,其他的不要用友元函数!!!)

    // 友元函数和运算符重载的碰撞.cpp : 定义控制台应用程序的入口点。
    //
    #include <iostream>
    
    using namespace std;
    template <typename T>
    class sten_fri
    {
    public:
    	sten_fri(T a);
    	sten_fri & operator +(sten_fri &sf2);
    	sten_fri & operator -(sten_fri & sf3);
    
    	friend ostream & operator << <T>(ostream &out, sten_fri sf);
    protected:
    private:
    	T a;
    };
    
    template <typename T>
    sten_fri<T> ::sten_fri<T>(T a)
    {
    	this->a = a;
    }
    
    template <typename T>
    sten_fri<T> & sten_fri<T>::operator +(sten_fri<T> &sf2)
    {
    	this->a = this->a + sf2.a;
    	return *this;
    }
    
    template <typename T>
    sten_fri<T> & sten_fri <T>::operator -(sten_fri<T> & sf3)
    {
    	this->a = this->a - sf3.a;
    	return *this;
    }
    
    template <typename T>
    ostream & operator << (ostream &out, sten_fri <T>sf)
    {
    	out << sf.a << endl;
    	return out;
    }
    
    
    int main()
    {
    	//需要把模版类进行具体化之后,才能定义对象,因为c++要分配内存
    	sten_fri <int>	a1(5);
    	cout << a1;//这里的友元函数中ostream out中间必须加引用,要不然是错误的。
    	sten_fri <int>	a2(2);
    	a1 = a1 + a2;
    	cout << a1;
    	a1 = a1 - a2;
    	cout << a2;
    
    	system("pause");
    	return 0;
    }
    

      

    //友元函数:友元函数不是实现函数重载(非 << >>)(特别麻烦,所以除了<<  >>都不用)

                              //1)需要在类前增加 类的前置声明 函数的前置声明

                                       template<typename T>

    class Complex; 

    template<typename T>

    Complex<T> mySub(Complex<T> &c1, Complex<T> &c2);

                              //2)类的内部声明 必须写成:

    friend Complex<T> mySub <T> (Complex<T> &c1, Complex<T> &c2);

                              //3)友元函数实现 必须写成:

                                       template<typename T>

                    Complex<T> mySub(Complex<T> &c1, Complex<T> &c2)

    {

                        Complex<T> tmp(c1.a - c2.a, c1.b-c2.b);

                        return tmp;

    }

                //4)友元函数调用 必须写成

                                       Complex<int> c4 = mySub<int>(c1, c2);

                    cout<<c4;

     

    结论:友元函数只用来进行左移友移操作符重载。

  • 相关阅读:
    概率论
    Python3爬虫爬取淘宝商品数据
    利用Python数据分析基础
    Linux安装MATLAB2016a
    python3爬取高清壁纸(2)
    python3爬取高清壁纸(1)
    Git使用基础
    Python3基础
    正则表达式的使用基础
    Nginx配置多域名代理
  • 原文地址:https://www.cnblogs.com/xiaochige/p/6804222.html
Copyright © 2011-2022 走看看