2011-04-11 102 views
1

可能重複:
Operator overloading運營商在C++重載

嗨可以有人請建議操作符重載一個很好的教程?
我所經歷的操作符重載這個代碼,我有以下懷疑
代碼:

#include <iostream> 
using namespace std; 
class Array { 

int *a; 
int size; 
int capacity; 

public: 
    Array (int c) {a=new int[c]; size=0; capacity =c; } ; 
    Array & operator << (int x); 
    int operator [] (int i) { 
     if (i<size) return a[i] ; 
     else { 
      cout <<"Segmentation Fault Prevented!\n"; 
      return -1; 
     } 
    }; 
}; 
Array &Array::operator << (int x) { 
    if (size < capacity) a[size++] = x; 
    else { 
    int *tmp = new int[size+capacity]; 
    for (int j=0; j<size; j++) 
     tmp[j]=a[j]; 
    delete [] a; 
    a = tmp; 
    a[size++]=x; 
    capacity=size+capacity; 
    } 
    return *this; 

} ; 

int main (int agrc, char *argv[]) { 

Array b(10); 

    for (int i=0; i<100; i++) b << i; 
    b << 1 << 2 << 3; 
    for (int i=0; i<105; i++) cout << b[i] << endl; 
} 

我有這些疑惑:

  1. 能有一個人請上提出一個很好的教程運算符超載?
  2. Array & operator << (int x);是什麼意思?
  3. int operator [] (int i) - 如果這是一個函數,爲什麼我們在這裏放方括號?
  4. Array &Array::operator意味着什麼?
  5. 什麼是*this

請幫我...我是新來的C++等有這些疑慮.... 預先感謝

+0

你想實現什麼? – bjornhol 2011-04-11 11:57:06

+1

只是在網站上搜索,許多類似的問題已經被問到,有人甚至寫了關於運算符重載的常見問題解答:http://stackoverflow.com/questions/4421706/operator-overloading – 2011-04-11 11:58:26

回答

1
  1. This
  2. 運算符< <正被重載以將整數作爲參數,並且它返回對Array類的引用。
  3. 運算符[]正被重載以接受一個整數作爲參數。它返回一個整數。
  4. 返回一個參考陣列,操作者< <屬於陣列
  5. this是指針到當前對象,所以*this解引用該指針。

或許你真的需要this鏈接....你encount T operatorX,其中X可以是任何(),[],<<,>>,+,+=,=,--,++

+1

這一個也很好看:http://en.wikibooks.org/wiki/C++_Programming/Operators/Operator_Overloading – 2011-04-11 12:02:53

1

每次,這就是所謂的「操作符重載」。它的確如它所說的那樣 - 它使您能夠在它超載的類上使用該運算符。例如,您的陣列可以像這樣訪問:

Array myArr(10); 
myArr[0] == 5; 
myArr[1] == 10; 
// ^^^ --- this is using the `operator[]` with an int parameter 
1

這是一個很好的例子。我曾經參考它。

操作符重載/ Catalog0200_Operator-Overloading.htm「> http://www.java2s.com/Tutorial/Cpp/0200_ 操作符重載/ Catalog0200 _operator-Overloading.htm

0

我很抱歉不能幫助更多的第一個問題,但我指的是「C++底」的一些基本概念,我我不清楚。

我認爲運算符重載沒有太多的區別,方法重載除了命名約定。如果你知道如何在C++中重載一個方法,一旦習慣了語法,就不會很難理解運算符重載。作爲其他面向對象的語言,在C++中,如果我們想重載一個方法,我們只是聲明多個版本的方法,用共享方法名稱和不同的參數列表來重載。儘管我們應該知道運算符的名稱(相當於方法重載中的方法名稱),但運算符重載看起來相同。爲了給運營商命名,我們首先應該使用關鍵字運營商,接着是我們想要超載的運營商。以你的第二個問題爲例:在這裏,我們將超載運算符< <(輸出運算符),並且我們使用運算符< <告訴編譯器「這就是我想要超載的。」另外,因爲運算符就像一個方法,它應該有一個返回值。在問題2中,返回數組&,這是對數組類型類型的引用。 「Array :: opertor < <」中的Array表示運算符< <是類Array的成員。

希望這可以給你一些暗示理解這段代碼片段。你可以在權威的C++教程中找到所有的概念。

祝你好運。