Вопрос об операторе ostream < - PullRequest
5 голосов
/ 27 октября 2010

Допустим, я создаю класс, например, который содержит массив символов.Теперь, какой оператор обрабатывает это:

myClass inst;
cout << inst;

В "cout << inst;"что называется просто именем класса?Спасибо. </p>

Ответы [ 5 ]

12 голосов
/ 27 октября 2010

То, что называется, это std::ostream &operator<<(std::ostream &, myClass const &). Вы можете перегрузить это, если хотите.

4 голосов
/ 27 октября 2010

Создавая оператор вывода друга, как в следующем примере.

#include <iostream>

class MyClass {
  friend std::ostream & operator<<(std::ostream &out, const MyClass &inst);
public:
  // ... public interface ...
private:
  char array[SOME_FIXED_SIZE];
};

std::ostream & operator<<(std::ostream &out, const MyClass &inst)
{
   out.write(inst.array, SOME_FIXED_SIZE);
   return out;
}

Пожалуйста, не делайте некоторые предположения о том, что вы подразумеваете под "массивом символов", это значительно упрощается, если ваш массив символовфактически nul (0 символов) завершен.

Обновление: я скажу, что это не строго возвращаемое значение для класса, а скорее текстовое представление класса - которое вы можете определить.

2 голосов
/ 27 октября 2010

Это приводит к ошибке компилятора, если у вас нет перегруженного оператора преобразования типов для некоторого типа, который знает ostream. Вы можете добавить свои собственные типы к типам, которые знает ostream, перегрузив глобальный ostream& operator(ostream& os, const myClass& x) или сделав ваш тип конвертируемым в строку / int и т. Д. Будьте осторожны, перегрузка Typecast может выстрелить вам в ногу и считается плохой практикой. .

Самый простой способ - просто напечатать некоторые переменные из вашего класса:

myClass inst;
cout << inst.getName() << ": " << inst.getSomeValue();
2 голосов
/ 27 октября 2010

Компилятор будет искать перегрузку operator<<.В частности, он будет искать либо перегрузку функции-члена std::ostream (не существует), либо свободную функцию, которую вы должны перегрузить следующим прототипом:

std::ostream &operator<< (std::ostream &os, const myClass &x);

Возможно, вам понадобитсясделать его другом myClass, если вам нужен доступ к защищенным / закрытым пользователям.

1 голос
/ 27 октября 2010

Чтобы использовать std::cout << someClass, вы должны создать оператор, подобный следующему:

std::ostream &operator<< (std::ostream &, const someClass &);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...