【问题标题】:i have class " my_string ". I overloaded operator " == ", but it doesnt work with pointers (my_string*)我有类“ my_string ”。我重载了运算符“==”,但它不适用于指针(my_string*)
【发布时间】:2019-05-12 09:14:57
【问题描述】:

我重载了 operator== 并且它不适用于指针

class my_string { 

    private:

        char* _ch;
        int _length;

    public:
                ...
                ...
        bool operator ==(const my_string& right) {

            if (this->_length == right._length) {

                for (int i = 0; i < this->_length; i++) {
                    if (_ch[i] != right._ch[i]) {
                        return false;
                    }
                }

            }

            else
                return false;
            return true;

        }
};

int main(){

my_string* f = "hello";

my_string* g = "hello";

if(f==g){

   cout<<"done";

}

return 0;

}

【问题讨论】:

  • 只需使用my_string f = "hello";my_string g = "hello";。为什么你认为那里需要指针?
  • my_string* f = "hello"; 是一个无效的初始化开始。它使f 指向包含字符串"hello" 的数组的第一个字符。它确实创建一个新的my_string 对象。
  • 比较f==g是比较指针,而不是调用它们可能指向的对象的任何重载函数。

标签: c++ class comparison operator-overloading


【解决方案1】:

这里有几个问题。

首先,如果类型是stringstring*,则调用f == g 时会有所不同。如果类型是string*,您实际上并不是在比较字符串,而是在比较指针本身(这很少有意义)。如果类型是string*,则需要使用*f == *g 来比较它们(* 取消引用指针并为您提供指向的实际对象)。

除此之外,这里不需要指针,代码my_string* f = "hello" 不应编译。 如果你想要一个指向你的字符串的指针,你需要使用

my_string str = "hello";
my_string* ptr = &str;

但是,我不明白你为什么要在这里使用指针。

【讨论】:

  • 如果答案解决了您的问题,请将答案标记为已解决。
猜你喜欢
  • 2015-07-21
  • 2013-08-18
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多