Я пишу небольшой код, чтобы узнать, что произойдет, если я использую операторы ввода строк для собственного класса.Оператор множественного ввода << в C++
#include <iostream>
using namespace std;
class MyClass
{
public:
int i;
MyClass & operator<< (const string & );
} ;
MyClass& MyClass::operator<< (const string & )
{
cout << this << endl ;
}
int main()
{
MyClass mc;
mc << "hello" << "world" ;
}
Он дает результат двух разных адресов памяти, что выходит за рамки моего воображения.
0x7fffdc69f6df
0x6020a0
я, хотя это должно быть как:
((mc << "hello") << "world");
Но на самом деле, это, кажется, "временный" MyClass между операциями. Это приводит к тому, что переменная-член (например, int i
в классе) не будет согласована. Может ли кто-нибудь дать комментарии об этом, если я хочу, чтобы переменная-член (int i
) могла получить доступ последовательно.
Скомпилирует ли этот код? Функция оператора не возвращает значение. –
Похоже, у вас есть некоторые серьезные заблуждения, что «mc <<« привет »« мир »,' на самом деле. Ваш вопрос не имеет смысла, все работает так, как ожидалось. –
Привет, Матти! Код может быть скомпилирован. Я, возможно, не совсем понимаю концепцию перегрузки оператора. Именно по этой причине я пытаюсь написать небольшой код, чтобы понять. Код сбой при добавлении i ++ в реализацию MyClass & MyClass :: operator << (const string &) { i ++; cout << this << "" << i << endl; } –