分页:
上一页 1 [2] 3 4 5 6 7 8 9 下一页
class Array {
public:
int& operator[] (unsigned i);
};
inline
int& Array::operator[] (unsigned i)
{ // ...
}
有些人不喜欢operator关键字或类体内的有些古怪的语法。但是算符重载语法不是被期望用来使得类的开发者的工作更简易。它被期望用来使得类的用户的工作更简易:
int main()
{
Array a;
a[3] = 4; // 用户代码应该明显而且易懂...
}
记住:在一个面向重用的世界中,使用你的类的人有很多,而建造它的人只有一个(你自己);因此你做任何事都应该照顾多数而不是少数。
什么算符能/不能被重载?大多数都可以被重载。C的算符中只有 . 和 ? :(以及sizeof,技术上可以看作一个算符)。C++增加了一些自己的算符,除了::和.*,大多数都可以被重载。 这是一个下标算符的示例(它返回一个引用)。先没有算符重载:
class Array {
public:
int& elem(unsigned i) { if (i > 99) error(); return data[i]; }
private:
int data[100];
};
int main()
{
Array a;
a.elem(10) = 42;
a.elem(12) += a.elem(13);
}
现在用算符重载给出同样的逻辑:
class Array {
public:
int& operator[] (unsigned i) { if (i > 99) error(); return data[i]; }
private:
int data[100];
分页:
上一页 1 [2] 3 4 5 6 7 8 9 下一页