у меня есть класс "my_string". Я перегружен оператор "==", но он не работает с указателями (my_string *) - PullRequest
0 голосов
/ 12 мая 2019

я перегружен оператор == и он не работает с указателями

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 Ответ

1 голос
/ 12 мая 2019

Здесь есть несколько проблем.

Прежде всего, есть разница, когда вы звоните f == g, если тип string или string*. Если тип string*, вы на самом деле не сравниваете строки, а вместо этого сравниваете сами указатели (что редко имеет смысл). Если тип string*, вам нужно будет использовать *f == *g для их сравнения (* разыменовывает указатели и выдает фактический объект, на который указывает).

Кроме того, указатели здесь не требуются, и код my_string* f = "hello" не должен компилироваться. Если вы хотите указатель на вашу строку, вам нужно будет использовать

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

Но опять же, я не понимаю, почему вы используете указатели здесь.

...