首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

对“重载操作符必须具有一个类类型操作数”这句话的不理解解决方案

2012-04-03 
对“重载操作符必须具有一个类类型操作数”这句话的不理解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++ code
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;}

观察到其中对下标操作符[]的重载中
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指针就是该对象

热点排行