我正在编写一个程序,用于在数组上重载“[]”运算符。这是我的代码
/ / 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)的引用
答案 0 :(得分:2)
一般语法是
<return type> class-name :: function-name (argument-list)
在您的情况下,返回类型是对整数的引用,即int &
int &atype::operator[](int i)
只是正确的语法
答案 1 :(得分:1)
您的operator[]
返回对索引请求的元素的引用。在这种情况下,您的数组是int
类型,因此它将是一个引用到一个int,即:int&
作为返回值。