перегрузка оператора * для структуры
Требуется, чтобы унарный оператор * возвращал значение поля data. Подскажите, пожалуйста, в чём состоит моя ошибка.
/*...*/
struct Node{
int data;
Node *prev, *next;
Node(int const& data, Node* next = nullptr, Node* prev = nullptr)
: data(data)
, next(next)
, prev(prev) {}
Node(int&& data, Node* next = nullptr, Node* prev = nullptr)
: data(std::move(data))
, next(next)
, prev(prev) {}
/*...*/
int operator *(Node* p) {
return p->data;
}
};
int main() {
Node* c = new Node(5);
std::cout << *c; // fail
}
Ответы (1 шт):
Автор решения: AR Hovsepyan
→ Ссылка
У вас аргумент оператора лишний.
Функции_члены класса первым аргументом неявно получают указатель(this) на данный объект, поэтому оператор нужно определить так:
int operator *() {
return data;
}
Для каждого объекта оператор вернет свое целочисленное значение, и можно написать так:
Node obj(5);
std::cout << *obj;
А указатель нужно разыменовывать:
Node* c = new Node(5);
std::cout << **c; // или же
std::cout << c->operator*();