关于字符串类的重裁!!(50分)

  • 主题发起人 主题发起人 zqfeng
  • 开始时间 开始时间
Z

zqfeng

Unregistered / Unconfirmed
GUEST, unregistred user!
class String
{
public:
String();
…………

// overloaded operators
char &
operator[](int offset) const;
char operator[](int offset) const;
…………
private:
char * itsString;
unsigned short itslen;
};
………………
char &
String::operator[](int offset)
{
if (offset > itslen)
return itsString[itslen-1];
else
return itsString[offset];

}
char String::operator[](int offset)
{
if (offset > itslen)
return itsString[itslen-1];
else
return itsString[offset];

}
请问重裁的这两个函数有什么不同?各有什么优缺点,都用在什么场合??
另外,const String &
GetlastName()const {……;}两个const各限制什么??
小弟热切盼望那位富翁给予指导!!
 
为什么没人回答我的问题那
不屑吗
各位富翁,小弟实在是不懂啊
那位富翁还是帮小弟一把,解释一二吧
谢过了!!!
 
第一个问题会有歧义,我也不懂。
说一下第二个:
const String &
GetlastName()const
第一个 const 表示返回的 String 对象的引用不可更改。
第二个 const 表示该函数 GetlastName() 不引起类内部状态的改变。
 
第一个问题就是返回一个引用的问题,如果返回的是一个char &就意味着,外部的代码可以修改类内的数据。
举例如下:
代码:
String str;
char ch;
……
//假设通过某种操作,存入字符串"abc"
ch = str[0];
//系统调用char &
String::operator[](int offset)函数
//这时候ch里的值是'a'
ch = 'b';
//这时候,str里存放的字符串变成了"[red]bbc[/red]"
如果返回的是一个char 就意味着,外部的代码,不能改变类中存放的数据
举例如下:
代码:
String str;
char ch;
……
//假设通过某种操作,存入字符串"abc"
ch = str[0];
//系统调用char &
String::operator[](int offset)函数
//这时候ch里的值是'a'
ch = 'b';
//这时候,str里存放的字符串还是"[red]abc[/red]"

小生拙见,多加指教。
 
建议看一下侯捷(台湾技术作家)的书籍,
看看MFC中CString类的实现源代码。
什么时候返回字符,什么时候返回引用一目了然。
有关Const的三种用法,C++的语法书中都有介绍。
[:D][:D][:D]
 
你重载的这两个操作符[],前一个既可以得到字符,也可以更改字符,而后者则只能得到字符。
还有,当offset = itslen的时候,请你测试一下会发生什么事情?
 
后退
顶部