所以,我需要帮助弄清楚如何为我必须创建的mystring类重载数组运算符。我已经知道了其他一切,但阵列因某些原因给我带来了麻烦 这是我的头文件
MyString MyString::operator [](MyString *)
{
... what goes here
}
MyString operator []的主体是什么样的?
<input name="name" class="form-value" type="text">
driver.findElement(By.name("name")); // this doesn't work
答案 0 :(得分:2)
将数组运算符与给定类的对象一起使用的语法是:
MyString s("Test");
char c = s[0];
函数的参数是一个整数值。
因此,运营商需要声明为:
// The non-const version allows you to change the
// content using the array operator.
char& operator [](size_t index);
// The nconst version allows you to just get the
// content using the array operator.
char operator [](size_t index) const;
答案 1 :(得分:0)
这不是您通常使用订阅运营商的方式
MyString MyString::operator [](MyString *)
使用[]
运算符时,您有何期待?按照你声明的方式,你使用一个字符串指针作为参数并接收一个字符串作为返回。
通常你传递索引类型(通常是无符号整数)并返回该位置的字符。如果这就是你想要的,你应该按照以下方式做点什么:
你会想要这样的东西:
char& MyString::operator [](size_t position)
{
// some error handling
return str[position];
}
char MyString::operator [](size_t position) const { /* ... */ }
有关重载运算符的整体指南,请查看this question。
另外我会指出你的析构函数有点奇怪:
if (len != 0)
delete [] str;
str = 0;
len = 0;
您的缩进级别表明您希望一切都在if
语句中发生,但只有第一个会发生。在这种情况下,这并不是特别危险,因为只有delete
就足够了。
delete
空指针没有问题,str
和len
将很快被销毁,因此您无需重置它们。