读书人

问个运算符重载的基础有关问题多谢

发布时间: 2012-03-22 17:43:57 作者: rapoo

问个运算符重载的基础问题,谢谢
C++里的运算符重载有什么用处呢?为什么要重载呢?
我看到一本书里有个重载[]的例子:
#include <iostream>
using namespace std;

const int SIZE = 3;

class atype {
int a[SIZE];
public:
atype() {
int i;
for(i = 0; i <SIZE; i++) a[i] = i;
}
int operator[] (int i) { return a[i];}
};
int main()
{
atype ob;
cout < < ob[2]; // 输出2
return 0;
}
这里面说重载了[],结果ob[2]就是显示数组里第二个元素的值,可如果我不重载[],ob[2]的意思不也是输出第二个元素的值吗?这里面重载[]到底有什么用处呢?

[解决办法]
你这段代码去掉重载是通不过编译的

因为C++默认的[]只对基本数据类型起作用,遇到自定义的类型只有重载才能让编译器知道对你自定义类型的[]运算该采取什么行为
[解决办法]
C++里的运算符重载有什么用处呢?为什么要重载呢?
答:运算符重载是为了使自定义类的运作方式更像内建类型。


可如果我不重载[],ob[2]的意思不也是输出第二个元素的值吗?
答:如果不重载[],楼住可以试验一下ob[2]应该是非法的,因为ob是class atype类型的,而不是“数组”。

读书人网 >C++

热点推荐