程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++運算符+,+=,<<,=重載范列

C++運算符+,+=,<<,=重載范列

編輯:C++入門知識

單操作符用返回引用,不能是友元函數,否則編譯不通過

雙操作符,必須定義為友元,否則編譯不通過

測試編譯器:g++ 4.6.3

 

 


[cpp]
#include <iostream>  
#include <ostream>  
#include <string>  
using namespace std; 
class T{ 
    public: 
        T(){}; 
        T(int t) 
        { 
            a = t; 
        }; 
        T(const T &t)//當沒有定義復制函數,編譯器會自己合成一個,並不會調用下面的賦值”=“操作符。  
        { 
            cout << "復制" << endl; 
            a = t.a; 
        }; 
        T& operator = (const T& t)//當沒有定義賦值函數,編譯器會自己合成一個,並不會調用下面的復制”()“操作符。  
        { 
            cout << "賦值" << endl; 
            a = t.a; 
            return *this; 
        } 
        T& operator += (int b) 
        { 
            a += b; 
            return *this; 
        } 
     
 
    private://友元函數可以為私有類,因為友元不是類成員,所以私有限制對他不起作用  
        friend  ostream& operator << (ostream& out,const T& t)//必須設為友元函數,否則編譯不通過  
        { 
            out << "the num is:" << t.a; 
            return out; 
        } 
     
        friend  T operator + (const T& t1, const T& t2)//必須設為友元函數,否則編譯不通過  
        { 
            T t; 
            t.a = t1.a + t2.a; 
            return t; 
        } 
        int a; 
}; 
void fun(T t) 

    return ; 

int main() 

    T t(2); 
    fun(t);//形參傳遞為復制函數  
    T t1; 
    t1 = t;//賦值操作符號  
    t1 += 5; 
    cout << t1 << endl; 
    T t2;// 如果是t2 = t + t1;初始化為復制函數,等價與t2(t + t1)  
    t2 = t + t1;//先加,在調用=  
    cout << t2 << endl; 
    return 0; 

#include <iostream>
#include <ostream>
#include <string>
using namespace std;
class T{
 public:
  T(){};
  T(int t)
  {
   a = t;
  };
  T(const T &t)//當沒有定義復制函數,編譯器會自己合成一個,並不會調用下面的賦值”=“操作符。
  {
   cout << "復制" << endl;
   a = t.a;
  };
  T& operator = (const T& t)//當沒有定義賦值函數,編譯器會自己合成一個,並不會調用下面的復制”()“操作符。
  {
   cout << "賦值" << endl;
   a = t.a;
   return *this;
  }
  T& operator += (int b)
  {
   a += b;
   return *this;
  }
 

 private://友元函數可以為私有類,因為友元不是類成員,所以私有限制對他不起作用
  friend ostream& operator << (ostream& out,const T& t)//必須設為友元函數,否則編譯不通過
  {
   out << "the num is:" << t.a;
   return out;
  }
 
  friend T operator + (const T& t1, const T& t2)//必須設為友元函數,否則編譯不通過
  {
   T t;
   t.a = t1.a + t2.a;
   return t;
  }
  int a;
};
void fun(T t)
{
 return ;
}
int main()
{
 T t(2);
 fun(t);//形參傳遞為復制函數
 T t1;
 t1 = t;//賦值操作符號
 t1 += 5;
 cout << t1 << endl;
 T t2;// 如果是t2 = t + t1;初始化為復制函數,等價與t2(t + t1)
 t2 = t + t1;//先加,在調用=
 cout << t2 << endl;
 return 0;
}

 

 

輸出結果為:

復制
賦值
the num is:7
賦值
the num is:9

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved