C ++ Operator "=" overload - Получить все значения в векторе на lhs равными двойному значению на rhs - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь перегрузить оператор "=" - в C ++, но не могу заставить его работать в обычном режиме. Моя идея состоит в том, чтобы изменить все элементы вектора на равное двойному значению.

Я пробовал несколько способов, но не могу заставить его работать (получая разные ошибки). Надеюсь, что кто-то может дать мне некоторое руководство. Вот где я застрял.

MyClass &operator=(const MyClass &lhs){
    for (int i = 0; i < lhs.vect.size(); i++){
        lhs.vect[i] = this;
    }
    return lhs;
};

int main() {
MyClassName = 3; // Should change all element in the vector to 3
};

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

В вашем методе-прототипе для перегрузки оператора '=' вы передаете ссылку на объект класса MyClass. Если вы хотите передать двойное число, вам нужно изменить прототип на

MyClass &operator=(double value);

Тогда вам просто нужно присвоить значение всем элементам вашего вектора.

        MyClass &operator=(double value);
        {
            for (unsigned int i = 0; i < _v.size(); ++i)
                    _v[i] = value;
            return *this;
        }

(Где _v - это вектор, который содержит ваш класс. Конечно, вы можете создать метод для копирования всех элементов объекта MyClass в другой объект MyClass, но это не ваш вопрос.

Если это не такработа, не могли бы вы предоставить нам некоторые "ошибки", о которых вы говорите?

1 голос
/ 10 ноября 2019

Вот правильный код:

class MyClass {
public:
    std::vector<double> vect;
    MyClass& operator=(double v) {
        for (int i = 0; i < vect.size(); i++) {
            vect[i] = v;
        }
        return *this;
    };
};

оператор присваивания, объявленный как член класса lhs -> this, и присвоенное значение равно rhs

...