您的位置:首页 > 编程语言 > C语言/C++

C++中const重载

2015-07-13 20:18 323 查看
众所周知,C++实现函数重载有两种情况:函数参数的类型不同,参数的个数不同。而与函数的返回值没有什么关系。

需要注意的是在如下情况下:

[c-sharp] view
plaincopy

float f1(float a, float b)

{

//

}



flaot f1(float a, float b, float c = 0)

{

//

}

下面的调用会产生歧义:

[c-sharp] view
plaincopy

f1(2.0, 2.0);

言归正传,看下面一段代码:取自Effective C++

[c-sharp] view
plaincopy

class TextBlock {

public:

...

const char& operator[] (std::size_t position) const

{return text[position];}

char& operator[] (std::size_t position)

{return text[position];}

private:

std::string text;

}



TextBlock tb("Hello");

std::cout << tb[0];



const TextBlock ctb("World");

std::cout << ctb[0];

const char& operator[] (std::size_t position) const

后一个const参与对重载函数的区分,这样在参数类型个数相同的情况下形成一种新的重载形式。



需要注意:常成员函数是常对象唯一的对外接口,使用使应该注意。常成员函数不能更新对象的数据成员,也不能调用该类中的普通成员函数。



这就是为什么const TextBlock ctb("World");会调用const char& operator[] (std::size_t position) const;的原因,包含了C++的隐式调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: