运算符在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;
}

我有这些怀疑:

  • 有人可以提出一个关于运算符重载的好教程吗?
  • Array & operator << (int x); 意思?
  • int operator [] (int i) - 如果这是一个函数,为什么我们在这里放方括号?
  • Array &Array::operator意味着什么?
  • 什么是*this
  • 请帮助我...我是新来的C ++,所以有这些怀疑....在此先感谢


  • 谷歌是你的朋友:)或看看http://www.parashift.com/c++-faq-lite/operator-overloading.html
  • 它重载<<运算符
  • 它重载[]运算符,所以你可以使用你的yourobject[something] 。 它用于例如std::map
  • 它看起来像是一个重载操作符实现的开始。
  • 这是对当前对象的引用。

  • 回答(1):你看过FAQ吗? http://www.parashift.com/c++-faq-lite/operator-overloading.html


    每次你加入T operatorX ,其中X可以是(),[],<<,>>,+,+=,=,--,++等中的任何一个,这就是所谓的“操作符重载”。 它的确如它所说的那样 - 它使您能够在它超载的类上使用该运算符。 例如你的数组可以像这样访问:

    Array myArr(10);
    myArr[0] == 5;
    myArr[1] == 10;
    //   ^^^ --- this is using the `operator[]` with an int parameter
    
    链接地址: http://www.djcxy.com/p/12713.html

    上一篇: operator overloading in c++

    下一篇: Why is no return type specified in this function clearly returns?