在c ++中传递引用

时间:2013-08-25 07:18:14

标签: c++

我正在编写一个程序,用于在数组上重载“[]”运算符。这是我的代码

 / / A safe array example.
    #include <iostream>
    #include <cstdlib>
    using namespace std;

    class atype {
      int a[3];
    public:
      atype(int i, int j, int k) {
        a[0] = i;
        a[1] = j;
        a[2] = k;
      }
      int &operator[](int i);
    };

    // Provide range checking for atype.
    int &atype::operator[](int i)
    {
      if(i<0 || i> 2) {
        cout << "Boundary Error\n";
        exit(1);
      }
      return a[i];
    }

    int main()
    {
      atype ob(1, 2, 3);

      cout << ob[1]; // displays 2
      cout << " ";

      ob[1] = 25; // [] appears on left
      cout << ob[1]; // displays 25

      ob[3] = 44; // generates runtime error, 3 out-of-range

      return 0;
    }

在课堂上我们宣称为

int &operator[](int i);

在课外,它被定义为

int &atype::operator[](int i)

它应该是int atype::&operator[](int i) 但它给了我错误。

1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(17): error C2589: '&' : illegal token on right side of '::'
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(17): warning C4091: '' : ignored on left of 'int' when no variable is declared
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(17): error C2143: syntax error : missing ';' before '::'
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(17): error C2059: syntax error : '::'
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(18): error C2143: syntax error : missing ';' before '{'
1>c:\users\abc\documents\visual studio 2010\projects\[]overl\[]overl\[]overl.cpp(18): error C2447: '{' : missing function header (old-style formal list?)

但是当我尝试int &atype::operator[](int i)时 它可以工作。任何人都可以解释我们是否传递了对class或operator [](int i)的引用

2 个答案:

答案 0 :(得分:2)

一般语法是

<return type> class-name :: function-name (argument-list)

在您的情况下,返回类型是对整数的引用,即int &

int &atype::operator[](int i)只是正确的语法

答案 1 :(得分:1)

您的operator[]返回对索引请求的元素的引用。在这种情况下,您的数组是int类型,因此它将是一个引用到一个int,即:int&作为返回值。