对“重载操作符必须具有一个类类型操作数”这句话的不理解解决方案
对“重载操作符必须具有一个类类型操作数”这句话的不理解C++ primer中文版第四版中 14.1重载操作符的定义其
对“重载操作符必须具有一个类类型操作数”这句话的不理解
C++ primer中文版第四版中 14.1重载操作符的定义
其中一个小标题是“重载操作符必须具有一个类类型操作数”
注解是:重载操作符必须具有至少一个类类型或枚举类型的操作数
一些常见的重载我能理解
比如
Sales_item operator+(const Sales_item&,const Sales_item&);
我理解的操作数就是其中的两个参数,都是类类型,符合小标题
Sales_item operator+=(const Sales_item&);
一个操作数,也为类类型
此类很明显的其中有类类型的定义的,我能理解
但是,问题出来了
14.5下标操作符
我将其中的类定义,与重载函数贴出来
C/C++ codeclass Foo{public: int &operator[](const size_t); const int &operator[](const size_t) const;private: vector<int> data;};int& Foo::operator[](const size_t index){ return data[index];}const int& Foo::operator[](const size_t index) const{ return data[index];}int main(){ return 0;}
观察到其中对下标操作符[]的重载中
int& operator[](const size_t index)
这里没有定义类类型,或者枚举类型呀,这难道不是跟“重载操作符必须具有至少一个类类型或枚举类型的操作数”这句话有冲突吗。
我的理解可能有错误,还请各位帮忙纠正一下,我一下也想不通是哪里理解错了。谢谢
[解决办法]int& operator[](const size_t index) //成员函数。传递一个this指针···
[解决办法]int& operator[](const size_t index)
这里没有定义类类型,或者枚举类型呀,这难道不是跟“重载操作符必须具有至少一个类类型或枚举类型的操作数”这句话有冲突吗。
没冲突,因为有个this指针,就你这来说比如
Foo obj;
obj[5];那么这个obj不就是对应的类类型对象么?
[解决办法]class Foo{
public:
int &operator[](const size_t);
const int &operator[](const size_t) const;
private:
vector<int> data;
};
int& Foo::operator[](const size_t index)
{
return data[index];
}
const int& Foo::operator[](const size_t index) const
{
return data[index];
}
int main()
{
return 0;
}
默认带有一个this指针了,this指针就是该对象