博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++Primer : 第十四章 :下标运算符
阅读量:2434 次
发布时间:2019-05-10

本文共 1254 字,大约阅读时间需要 4 分钟。

表示容器的类通常可以通过元素在容器中的位置访问元素,这些类一般会定义下标运算符operator[]。

下标运算符必须是成员函数
为了与下标的原始定义兼容,下标运算符通常以访问元素的引用作为返回值,这样的好处是下标可以出现在赋值运算符的任意一端。进一步,我们最好同时定义下标运算符的常量版本和非常量版本,当作用于一个常量对象时,下标运算符返回常量引用以确保我们不会给返回的对象赋值。

如果一个类包含下标运算符,则它通常会定义两个版本:一个返回普通引用,另一个是类的常量成员并返回常量的引用。

class StrVec {
public: string& operator[](size_t n) {
return elements[n]; } const string& operator[](size_t n) const {
return elements[n]; }private: string* elements; //指向数组首元素的指针};

当StrVec是非常量时,可以给元素赋值,当对常量对象取下标时,不能为其赋值:

//假设svec是一个StrVec对象const StrVec cvec = svec;      //把svec的元素拷贝到cvec中//如果svec中含有元素,对第一个元素运行string的empty函数if (svec.size() && svec[0].empty()){
svec[0] = "zero"; //正确:下标运算符返回string的引用 cvec[0] = "Zip"; //错误:对cvec取下标返回的是常量引用}

为你的StrBlob类、StrBlobPtr类、StrVec类和String类定义下标运算符

class StrBlob {
public: string& operator[](size_t n) {
return data[n]; } const string& operator[](size_t n) const {
return data[n]; }};class StrBlobPtr {
public: string& operator[](size_t n) {
return (*wptr.lock())[n]; } const string& operator[](size_t n) const {
return (*wptr.lock())[n]; }};class String {
public: char& operator[](size_t n) {
return (char)str[n]; } const char& operator[](size_t n) const {
return (char)str[n]; }private: char* str;};

转载地址:http://xtxmb.baihongyu.com/

你可能感兴趣的文章
心得分享:防火墙程序使用的几点经验(转)
查看>>
创建ISAPI扩展(转)
查看>>
ORACLE 9I 重建 TEMP 表空间(转)
查看>>
Windows Server 2003 R2 Beta 2将公测(转)
查看>>
Pocket PC应用程序中使用SQL Server CE(转)
查看>>
完美解决不修改NTLDR-最后一次正确配置的问题(修正)(转)
查看>>
在双硬盘上安装独立32位和64位双系统(转)
查看>>
MYSQL列类型参考(转)
查看>>
病毒及木马预警一周播报(06.04.17~04.23)(转)
查看>>
黑客口述:我的第一台3389肉鸡的经历(转)
查看>>
如何在SQLSERVER中快速有条件删除海量数据(转)
查看>>
实用的存储过程之一 (转)
查看>>
图片格式整理(增加alcatel)(转)
查看>>
小糊涂学symbian日记(3)(转)
查看>>
DispatchMessage函数 (转)
查看>>
多媒体文件的搜索技巧浅淡(转)
查看>>
用ASP+XML打造留言本 - 2(转)
查看>>
WML数据值性质(转)
查看>>
手机eBook的制作方法(转)
查看>>
理论上最快的Web数据库分页方法(转)
查看>>