Как сюда приделать перегрузку ввода вывода?
#include <iostream>
using namespace std;
class Student {
public:
string name;
int classs;
int pol;
friend void getStudent(const Student & student);
};
void getStudent(const Student & student) {
if (student.classs == 6 && student.pol == 1) {
cout << "Учеников 6 класса:" << endl;
cout << student.name << endl;
} else
return;
}
int main() {
int x;
cout << "Введите количество учеников" << endl;
cin >> x;
Student mass[x];
for (int j = 0; j < x; ++j) {
cout << "Введите фамилию ученика " << endl;
cin >> mass[j].name;
cout << "Введите номер класса ученика " << endl;
cin >> mass[j].classs;
cout << "Введите пол ученка ((м=1) / (ж=0)) " << endl;
cin >> mass[j].pol;
}
for (int i = 0; i < x; ++i) {
getStudent(mass[i]);
}
return 0;
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Перегрузка оператора вывода будет такая
std::ostream& operator<<(std::ostream& os, const Student& st)
{
os << st.name << " " << st.class << (st.pol == 1?'м':'ж');
return os;
}
и теперь вместо странной функции getStudent, лучше написать
showSixGradeMaleStudent(const Student & student) {
if (student.classs == 6 && student.pol == 1) {
std::cout << student << '\n';
}
}
а вот как оператор ввода для Вашей задачи перегрузить.... Возможно так, но я не уверен
std::istream& operator>>(std::istream& is, Student& s) {
cout << "Введите фамилию ученика " << endl;
is >> mass[j].name;
cout << "Введите номер класса ученика " << endl;
is >> mass[j].classs;
cout << "Введите пол ученка ((м=1) / (ж=0)) " << endl;
is >> mass[j].pol;
return is;
}
вот только использование std::cout в ней меня очень сильно-сильно напрягает.