Мы знаем, что увлекательный класс iostream является чем-то слишком мощным. он overloded оператора вставки "< <", чтобы принять много типов данных: ostream & оператора (ostream &, целые), ostream & оператора (ostream &, голец) ...C++ ostream << проблемы с перегрузкой
мы не можем instantiaate ostream: ostream Распечатать; потому что ostream потому, что его большинство CTORSs являются «защищенными» (не доступны извне).
единственным конструктором, который мы можем назвать, является ostream (streambuf *), который принимает указатель на другой объект класса (класс streambuf);
Я просто хотел портить с этим классом:
#include <ostream>
using namespace std;
int operator << (ostream& out, int* x)
{
out << "invoked!" << endl;
cout << *x; // works well!
cout << x; // normally works well and it prints the address that x points to but instead the program get in infinite loop or crushes!
return *x;
}
int main()
{
system("color 1f");
int* pVal = new int(57);
cout << *pVal << endl;
int* pX = new int(7);
cout << *pX << endl;
cout << *pVal << ", " << *pX << endl;
//cout << pVal << endl; // this doesn't work because my operator returns
//int and not a reference to ostream.
// and it is equal to: 0 << endl; which generates the same error
cout << pVal; // this works
// cout << endl << endl << endl;
return 0;
}
Я перегружен оператор вставки взять именующее выражение в качестве ссылки на объект ostream и указатель на INT, как RValue, я всплывающее сообщение внутри моя функция, чтобы убедиться, что она вызывается.
Обратите внимание, что я намеренно перегружен его вернуть INT значение, так что никто не может написать:
out << pInt << *pInt << endl;
... но просто:
out << pInt;
Моя проблема, как вы можете видеть в inline-комментарии выше, то, что cout << x
нормально работает хорошо, вместо этого программа попадает в бесконечный цикл или подавляет!
return *x;
Может кто-нибудь объяснить, почему я получаю сообщение об ошибке?
Я написал эту проблему. пожалуйста, обратите внимание. cout << x; // нормально работает хорошо, и он печатает адрес, на который указывает x, но вместо этого программа попадает в бесконечный цикл или подавляет! return * x; – Raindrop7