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++的隐式调用。
需要注意的是在如下情况下:
[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++的隐式调用。
相关文章推荐
- vs2010下C++调用lib或dll文件
- C语言基础之--------内存地址分配
- C语言基础———指针,结构体指针,函数指针
- ZOJ2714迭代更新
- C语言基础---------函数,结构体
- C语言基础-----二维数组,三维数组
- 【C++/STL】list的实现(采用空间配置器和迭代器)
- C语言基础之数组
- C语言基础---BOOL 类型,运算符,if 语句,switch语句
- C++中将构造函数或析构函数定义为private
- [Section 1.1] Greedy Gift Givers
- C++中浅拷贝和深拷贝问题
- [leetcode-27]Remove Element(C语言)
- C语言中关键字auto、static、register、const、volatile、extern的作用
- c++ primer读书笔记-第十四章 重载操作符与转换
- C与C++中定义结构体的不同方式
- 学习C语言结构体
- 两个类相互调用的问题
- C语言基础问题1 数据在内存上的表现形式
- 黑马程序员——IOS基础之C语言---C语言基础知识介绍