C++中const重载
2015-06-18 11:50
288 查看
转自:http://blog.csdn.net/sulliy/article/details/5643443
众所周知,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++的隐式调用。
众所周知,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++的隐式调用。
相关文章推荐
- C++实现矩阵卷积
- 一元线性回归模型与最小二乘法及其C++实现
- C++中RGB转换为ARGB
- c++ 中 struct 和 class 的区别
- C++运算符重载为成员函数
- C++中++运算符的重载
- C++运算符重载为非成员函数
- VC++动态链接库(DLL)编程深入浅出
- C语言-srand种子详解
- C++namespace命名空间
- C++ 12.1.5 定义类对象
- Effective C++ 条款54-55
- C++中赋值操作符为什么要返回引用类型
- C++实现设计模式 - STATE(状态)—对象行为模式(第二十个)
- 画数组的直方图
- C++12.1.4 类的前向声明、不完全类型类
- 作用域内枚举(C++11)
- POJ 1338 Ugly Numbers
- C语言易混淆关键词详解-const,static,extern,typedef,声明
- c++ builder 俩种不同风格的窗体