Ada*_* Mo 3 c++ string class operator-overloading
我正在考虑如何从左侧和右侧重载[]以设置为函数并获取我正在处理的自定义字符串类.例如:
char x= objAr[1]; //get
objAr[2]='a'; //set
Run Code Online (Sandbox Code Playgroud)
字符串类基本上如下所示:
class String {
private:
char* data;
unsigned int dataSize;
public:
String();
String(char);
String(char*);
String(String&);
~String();
char* getData();
int getSize();
};
Run Code Online (Sandbox Code Playgroud)
如果您始终拥有备份数据,则可以返回参考:
char& String::operator[] (size_t idx)
{ return data[idx]; }
char String::operator[] (size_t idx) const
{ return data[idx]; }
Run Code Online (Sandbox Code Playgroud)
在你的情况下,这应该是足够的.但是,如果由于某种原因这不是选项(例如,如果数据不总是正确类型),您还可以返回代理对象:
class String
{
void setChar(size_t idx, char c);
char getChar(size_t idx);
class CharProxy
{
size_t idx;
String *str;
public:
operator char() const { return str->getChar(idx); }
void operator= (char c) { str->setChar(idx, c); }
};
public:
CharProxy operator[] (size_t idx)
{ return CharProxy{idx, this}; }
const CharProxy operator[] (size_t idx) const
{ return CharProxy{idx, this}; }
};
Run Code Online (Sandbox Code Playgroud)
这还可以让您通过写时复制执行隐式数据共享等操作.
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |