解释c++中的操作符重载
Explain operator overloading in C++
class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { }
double& operator[](int i) { return elem[i]; } //function 2
int size() { return sz; }
private:
double∗ elem;
int sz;
};
代码片段来自: c++编程语言第4版, Bjarne Stroustrup
IDE: Microsoft Visual Studio Professional 2013
请解释operator关键字有什么作用?我试着搜索,找不到任何其他除了操作符重载,这不是我的问题
double read_and_sum(int s) {
Vector v(s); //line 1
for (int i=0; i!=v.size(); ++i)
cin>>v[i]; //line 3
double sum = 0;
for (int i=0; i!=v.size(); ++i)
sum+=v[i];
return sum;
}
line1传递了vector类的构造函数所需的int型实参s,这很好。
但是在第3行,"cin>>v[i]"怎么可能是有效的呢?,因为对象v没有声明为对象数组。即使它是有效的值去哪里…?
看来你是c++新手。下面关于操作符重载的链接可能会有用。
操作符重载基础:operator重载。
可以重载的操作符的完整列表:
I tried searching on internet, couldn't find anything else apart from operator overloading, which is not my question.
实际上,你的问题似乎是关于操作符重载的,你只是不知道而已。
operator
关键字在类声明中用于重载操作符。在您所展示的示例中,该类重载了数组索引操作符[]
。这就是允许语法cin>>v[i]
(问题的第二部分)工作的原因。因为[]
操作符是重载的,所以可以用这种方式引用类对象——当进行这样的引用时,编译器生成代码来调用重载的定义。重载定义告诉它如何在给定数组索引的情况下获得正确的对象。这让你的类表现得像一个数组,即使它实际上不是一个。
操作符重载经常被误解和误用,但如果使用得当,它是c++中唯一强大的特性。
我不能回答关于Visual Studio中关键字着色的部分——听起来这只是微软编辑器的一个特性。但operator
在c++中绝对是一个关键字,无论IDE如何显示它。