问关于重载运算符[]的问题~~

iceandfire 2002-05-29 05:52:51
请教一下这两个重载函数到底返回的是什么引用啊?在主函数里是怎么用的?
char& operator[](int n)
{
return *(sptr+n);
}
const char operator[](int n) const
{
return *(sptr+n);
}
谢谢了~~~
代码如下~~:

#include <iostream.h>
#include <string.h>

class String
{
char* sptr;

public:
String(char* s=0);
~String(){delete sptr;}
void display()
{
cout<<sptr<<endl;
}

char& operator[](int n)
{
return *(sptr+n);
}
const char operator[](int n) const
{
return *(sptr+n);
}
};

String::String(char* s)
{
if(s)
{
sptr=new char[strlen(s)+1];
strcpy(sptr,s);
}
else
sptr=0;
}

int main()
{
String string1("The ldes of March");
string1.display();

string1[4]='1';
string1[5]='5';
string1[6]='t';
string1[7]='h';
string1.display();

strncpy(&string1[4],"21st",4);
string1.display();

const String string2("Et tu,Brute?");
for(int i=0;i<13;i++)
cout<<string2[i];

getchar();
return 0;
}
...全文
16 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhdleo 2002-05-29
  • 打赏
  • 举报
回复
这和我问过的问题有关,大家帮过我,我来说
第一个 是个关于char型的引用函数,因为是char&
那么就如楼上有人说的,返回调用它的地方后还可以对他进行修改操作!

后面的仅仅是个char型的,返回后不能再修改,
所以我想那就是为什么又有前一个const的原因了吧,
“反正原本返回后就不能改”,索性const。

我的愚见!
opengl3d 2002-05-29
  • 打赏
  • 举报
回复
1 可以改变
2 不可
mylove0618 2002-05-29
  • 打赏
  • 举报
回复
第一个返回字符串中的一个字符,可以在外界修改该字符值。后面一个返回字符串中的一个字符的值,不能对原字符作修改。
另外,你的程序有一些问题,如析构函数。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧