Сейчас я пытаюсь обновить sh и улучшить свои навыки C ++, и я читаю несколько книг параллельно в зависимости от предмета, который мне нужно изучить.
Сейчас я провожу время на языке программирования C ++ от Страуструпа. На стр. 61/62 есть пример класса для комплексных чисел. Он перегружает ряд операторов, таких как + = и - =. В то же время в нем говорится, что «Многие полезные операции не требуют прямого доступа к представлению комплекса, поэтому их можно определить отдельно от определения класса».
Теперь, когда я пробую следующий код:
#pragma once
#include <iostream>
class Complex
{
private:
double re, im;
public:
Complex(double r, double i): re{r}, im{i} {}
Complex(double r): re{r}, im{0} {}
Complex(): re{0}, im{0} {}
double real() const { return re; }
void real(double d) { re = d; };
double imag() const { return im; }
void imag(double d) { im = d; }
void print();
Complex& operator+= (Complex z) { re += z.re, im += z.im; return *this; }
Complex& operator-= (Complex z) { re -= z.re, im -= z.im; return *this; }
};
Complex operator+ (Complex a, Complex b) { return a += b; }
Я получаю сообщение об ошибке ссылки: class Complex_cdecl operator+(class Complex, class Complex)
уже определено в Complex.obj
Обнаружен один или несколько многократно определенных символов.
Итак, я полагаю, что код, представленный в книге, является только частичное. Я не могу понять, как правильно использовать overload
и +
, и +=
. Книга здесь неправильная или устарела?
Спасибо за вашу помощь.