Короткая версия
Перегрузка оператора вставки .
TL; DR-версия
Хотя нет ничего вредного в функции, которая только пишет в cout
, это гораздо полезнее и не сложнее написать функцию, которая может писать в любой ostream
.
void Student::PrintStudentDetails(std::ostream & out) // pass in any out stream
{
out << "Name: " << student.GetName() << '\n'
<< "Age: " << student.GetAge() << '\n'
<< "Gender: " << student.GetGender() << '\n';
}
Примечание: операторы вставки могут соединяться в цепочку.
Сторона примечание: std::endl
- это новая строка И поток flu sh, и этот поток flu sh может быть очень дорогим. Как правило, вы хотите передать sh только тогда, когда вам нужно немедленно доставить sh информацию клиенту или буфер потока заполнен. В большинстве других случаев предпочитайте использовать от '\n'
до endl
.
Писать перегрузку <<
, которая печатает ваш класс, будет лишь незначительно сложнее, чтобы вы могли anystream << myClassInstance;
.
std::ostream & operator<<(std::ostream & out, // any outstream
const Student & student) // the object to print
{
out << "Name: " << student.GetName() << '\n'
<< "Age: " << student.GetAge() << '\n'
<< "Gender: " << student.GetGender() << '\n';
return out; // this is the magic that allows chaining
}
Теперь вы можете
cout << myStudent;
Примечание: оператор вставки часто реализуется как friend
класса, чтобы обеспечить легкий доступ к private
переменным.
Для получения дополнительной информации о перегрузке операторов прочитайте Каковы основные c правила и идиомы для перегрузки операторов?