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

[c++]重載操作符

編輯:C++入門知識

目錄   輸入和輸出操作符 算術操作符和關系操作符 下標操作符 自加、自減操作符 成員訪問操作符 1  輸入和輸出操作符   1.1 輸出操作符   1.1.1 示例   復制代碼 #include <iostream> #include <string> using namespace std;   class A {     friend ostream& operator<<(ostream& out, const A& a);     public:         A(const string &s = "", int v = 0) : ss(s), val(v) {} //構造函數帶默認參數     private:         int val;         string ss; };   ostream& operator<<(ostream& out, const A& a) {     out << "a.ss:" << a.ss << " " << "a.val:" << a.val;     return out; }   int main() {     A a("hello", 23);     cout << a << endl;     A b;     cout << b << endl; } 復制代碼 結果       1.1.2 說明   1)IO操作必須為非成員函數   原因:I/O操作的接口返回的是ostream&對象(只有返回左值,這樣才可以連續的輸出,例如cout << a << b)。自定義的輸出操作符應該與其相似。如果將其定義為成員函數(有個首默認參數this,即指向自己的指針),左操作數只能是該類型的對象,則沒法辦到。例如:Sales_item; item << cout; 與常規定義相反,因此只能為非成員函數。   2)因為要訪問指定類的私有成員,所以在該類中聲明輸出操作符為友員函數。   3)第一個形參必須為引用。因為I/O對象不可以復制。同理返回值必須為一個引用。   4)第一個形參不可以為const,因為寫入到流會改變其值。   5)第二個為引用,這樣可以避免復制。參數可以為const,可以接收const對象和非const對象;否則,如果為非const,則只能接收非coust對象。一般為const,畢竟只是輸出而已,不改變對象。       1.2 輸入操作符   1.2.1 示例   復制代碼 #include <iostream> #include <string> using namespace std;   class A {     friend ostream& operator<<(ostream& out, const A& a);     friend istream& operator>>(istream& in, A& a);     public:         A(const string &s = "", int v = 0) : ss(s), val(v) {}     private:         int val;         string ss; };   ostream& operator<<(ostream& out, const A& a) {     out << "a.ss:" << a.ss << " " << "a.val:" << a.val;     return out; } istream& operator>>(istream& in, A& a) {     in >> a.ss >> a.val;     if(in)     {         cout << "Input right" << endl;     }     else     {         cout << "in.fail:" << in.fail() << endl;         cout << "input wrong!" << endl;     }     return in;  }   int main() {     A a("hello", 23);     cout << a << endl;     A b;     cin >> b;     cout << b << endl; } 復制代碼

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