美文网首页
类的const和非const成员函数的重载

类的const和非const成员函数的重载

作者: yaowang1 | 来源:发表于2015-06-24 16:34 被阅读0次

类的const和非const成员函数的重载

我们从一个例子说起,来看上一篇文章中的String类, 我们为它提供一个下标操作符([ ])以读写指定位置的字符(char)。

只要了解过C++的操作符重载的语法,很快就可以写出下面这个[]操作符重载函数:

char& operator[](int posion)    // function_1

{

return data[posion];

};

注意,这里该函数的返回值为一个引用,否则str[0] = 'c'这样的语句就会不合法,因为str[0]将是一个左值。

那么,是否提供这样一个function_1就足够了呢?看下面这段代码:

const String str= "She";

char c = str[0];    // 错误!编译提示:error C2678: 二进制“[” : 没有找到接受“const String”类型的左操作数的运算符(或没有可接受的转换)

很显然,我们必须还要为const String提供一个const版本的opeartor[]。如下:

char& operator[](int posion) const

{

return data[posion];

}

这样,当使用const的String对象使用[]操作符时,便会调用该const的重载版本。

但是,这样就OK了嘛?虽然上面的那段代码没有问题了,但是其中却隐藏了一个陷阱,看如下代码:

const String str = "She";

str[0] = 'T';

上面这段代码可以编译,运行通过,str变为了"The"!而str声明为const的!!

现在,你应该知道了,对于const的该操作符重载函数其返回值也应该是const的,否则就会出现可以通过其修改const对象的漏洞。修改如下:

const char& operator[](int posion) const

{

return data[posion];

}

好了,现在没有问题了!

我们再回过头来看一下,为了给String提供一个[]操作符来读写指定位置的字符,需要提供如下两个函数,以分别对非const String对象和const String对象提供支持:

char& operator[](int posion)

{

return data[posion];

};

const char& operator[](int posion) const

{

return data[posion];

}

相关文章

  • 类的const和非const成员函数的重载

    类的const和非const成员函数的重载 我们从一个例子说起,来看上一篇文章中的String类, 我们为它提供一...

  • Boolan-C++面向对象高级编程(下)第二周笔记

    1. const 上表中:由于成员函数的const和非const同时存在,const对象只能调用const成员函数...

  • C++的const类成员函数

    小结: const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const...

  • [进阶]C++:函数重载

    定义重载函数 重载函数是函数名相同但是参数列表不同的函数 重载和const形参 const_cast 在重载函数中...

  • 19-const成员

    const成员 const成员:被const修饰的成员变量,非静态成员函数 像在平时开发中,可以通过以下的方式来定...

  • C++

    框架: 构造函数: 继承中的访问控制: 不允许重载的符号: 成员指针与成员函数指针: const的限定: 类中静态...

  • 类与数据抽象

    类 类即抽象数据类型 成员函数只能重载本类的其他成员函数,这个主要是因为重载需要在同一个作用域下 const成员函...

  • Geekband-job2.2

    1、const 类的成员函数后加const如(void mm()const)后,const属于签名,与不加cons...

  • C++ const用法

    一 修饰类 C++中const修饰类主要包括3个部分:数据成员,成员函数,对象。 数据成员const 修饰类的成员...

  • const的用法,特别是用在函数后面

    const的用法,特别是用在函数后面 在普通的非 const成员函数中,this的类型是一个指向类类型的 cons...

网友评论

      本文标题:类的const和非const成员函数的重载

      本文链接:https://www.haomeiwen.com/subject/rlceqttx.html