#c #operator-overloading #overloading #operator-keyword
#c #перегрузка оператора #перегрузка #оператор-ключевое слово
Вопрос:
Итак, вот в чем проблема. У меня есть класс B, где я перегрузил оператор <<, и класс A, где оператор << также перегружен. Однако << перегрузка в классе B, похоже, не работает в << перегрузка в классе A. Он просто возвращает адрес b, как если бы << перегрузки в классе B не существовало.
Любая помощь была бы очень признательна
#pragma once
#include <ostream>
using namespace std;
class B {
public:
B(int x) {
this->x = x;
}
friend ostreamamp; operator<<(ostreamamp; os, Bamp; b)
{
os << "this is B " << b.x;
return os;
}
private:
int x;
};
#pragma once
#include <ostream>
#include "B.h"
using namespace std;
class A {
public:
A(B* b) {
this->b = b;
this->x = 0;
}
friend ostreamamp; operator<<(ostreamamp; os, Aamp; a)
{
os << a.b << endl; //this doesnt work <============
os << "this is a " << a.x;
return os;
}
private:
int x;
B* b;
};
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main()
{
B* b = new B(1);
A* a = new A(b);
cout << *a << "inside a "<< endl;
cout << *b << "inside b " <<endl;
}
Ответ №1:
os << a.b // ...
a.b
это не a B
, для которого вы определили перегрузку, посмотрите внимательнее на свой код:
class A {
private:
B* b;
};
Это а B *
, а не а B
, и для этого не существует перегрузки.
Если вы хотите вызвать перегрузку здесь, используйте os << (*a.b) // ...
;