我有课“ my_string”。我重载了运算符“ ==”,但它不适用于指针(my_string *)

时间:2019-05-12 09:14:57

标签: c++ class comparison operator-overloading

我重载了运算符==,并且不适用于指针

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;

}

1 个答案:

答案 0 :(得分:1)

这里有几个问题。

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

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

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

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