mystring类的重载数组运算符

时间:2015-11-28 04:29:57

标签: c++ operator-overloading c-strings

所以,我需要帮助弄清楚如何为我必须创建的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

2 个答案:

答案 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空指针没有问题,strlen将很快被销毁,因此您无需重置它们。