Создать класс «Ученик» с полями: ФИО, класс, пол.
Описать дружественную функцию для вывода учеников 6 класса
мужского пола. В программе перегрузить операторы ввода и
вывода
C/C++
Програмирование с++,классы, дружественная функция
#include <iostream>
#include <string>
#include <array>
using namespace std;
void flush(istream& inp = cin) {
inp.ignore(inp.rdbuf()->in_avail());
}
class Learner {
public:
Learner()
: sex(' '), grade(0) {}
Learner(string name, char sex, short grade)
: name(name), sex(sex), grade(grade) {}
short get_grade()const {
return grade;
}
char get_sex()const {
return sex;
}
string get_name()const {
return name;
}
private:
char sex;
short grade;
string name;
friend ostream& operator<<(ostream& out, const Learner& lern) {
return out << lern.name << ", " << lern.grade << ", " << lern.sex;
}
friend istream& operator>>(istream& inp, Learner& lern) {
cout << "Ф. И. О.: ";
getline(inp, lern.name);
cout << "Пол (м/ж): ";
lern.sex = inp.get();
cout << "Класс (1-11): ";
inp >> lern.grade;
flush(inp);
return inp;
}
};
constexpr size_t quant = 8U; // Задаёт количество учеников в классе
using sheet_t = array<Learner, quant>;
ostream& man_6th_grade(ostream& out, const sheet_t& sheet) {
for (const auto& record : sheet) {
if (record.get_grade() == 6 && record.get_sex() == 'м') {
cout << record << '\n';
}
}
return out;
}
int main() {
system("chcp 1251 > nul");
sheet_t sheet{};
for (auto& record : sheet) cin >> record;
system("cls");
for (const auto& record : sheet) cout << record << '\n';
puts("");
man_6th_grade(cout, sheet);
system("pause > nul");
}
P.S. Стесняюсь спросить, а с кем в вашем задании собирается дружить ваш класс, чтобы его дружественная функция выводила список, которого в классе по объективным причинам быть не может? Может следующее имелось ввиду?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void flush(istream& inp = cin) {
inp.ignore(inp.rdbuf()->in_avail());
}
class Learner {
public:
Learner()
: sex(' '), grade(0) {}
Learner(string name, char sex, short grade)
: name(name), sex(sex), grade(grade) {}
short get_grade()const {
return grade;
}
char get_sex()const {
return sex;
}
string get_name()const {
return name;
}
private:
char sex;
short grade;
string name;
friend ostream& operator<<(ostream& out, const Learner& lern) {
return out << lern.name << ", " << lern.grade << ", " << lern.sex;
}
friend istream& operator>>(istream& inp, Learner& lern) {
cout << "Ф. И. О.: ";
getline(inp, lern.name);
cout << "Пол (м/ж): ";
lern.sex = inp.get();
cout << "Класс (1-11): ";
inp >> lern.grade;
flush(inp);
return inp;
}
};
class Sheet {
public:
void add(const Learner& lern) {
sheet.push_back(lern);
}
void add(const size_t quant) {
if (quant) {
Learner lern;
for (auto i = 0U; i < quant; ++i) {
cin >> lern;
sheet.push_back(lern);
}
}
}
friend ostream& man_6th_grade(ostream& out, const Sheet& sh) {
for (const auto& record : sh.sheet) {
if (record.get_grade() == 6 && record.get_sex() == 'м') {
cout << record << '\n';
}
}
return out;
}
private:
vector<Learner> sheet;
};
int main() {
system("chcp 1251 > nul");
Sheet sheet;
sheet.add(8);
man_6th_grade(cout, sheet);
system("pause > nul");
}
#include <string>
#include <array>
using namespace std;
void flush(istream& inp = cin) {
inp.ignore(inp.rdbuf()->in_avail());
}
class Learner {
public:
Learner()
: sex(' '), grade(0) {}
Learner(string name, char sex, short grade)
: name(name), sex(sex), grade(grade) {}
short get_grade()const {
return grade;
}
char get_sex()const {
return sex;
}
string get_name()const {
return name;
}
private:
char sex;
short grade;
string name;
friend ostream& operator<<(ostream& out, const Learner& lern) {
return out << lern.name << ", " << lern.grade << ", " << lern.sex;
}
friend istream& operator>>(istream& inp, Learner& lern) {
cout << "Ф. И. О.: ";
getline(inp, lern.name);
cout << "Пол (м/ж): ";
lern.sex = inp.get();
cout << "Класс (1-11): ";
inp >> lern.grade;
flush(inp);
return inp;
}
};
constexpr size_t quant = 8U; // Задаёт количество учеников в классе
using sheet_t = array<Learner, quant>;
ostream& man_6th_grade(ostream& out, const sheet_t& sheet) {
for (const auto& record : sheet) {
if (record.get_grade() == 6 && record.get_sex() == 'м') {
cout << record << '\n';
}
}
return out;
}
int main() {
system("chcp 1251 > nul");
sheet_t sheet{};
for (auto& record : sheet) cin >> record;
system("cls");
for (const auto& record : sheet) cout << record << '\n';
puts("");
man_6th_grade(cout, sheet);
system("pause > nul");
}
P.S. Стесняюсь спросить, а с кем в вашем задании собирается дружить ваш класс, чтобы его дружественная функция выводила список, которого в классе по объективным причинам быть не может? Может следующее имелось ввиду?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void flush(istream& inp = cin) {
inp.ignore(inp.rdbuf()->in_avail());
}
class Learner {
public:
Learner()
: sex(' '), grade(0) {}
Learner(string name, char sex, short grade)
: name(name), sex(sex), grade(grade) {}
short get_grade()const {
return grade;
}
char get_sex()const {
return sex;
}
string get_name()const {
return name;
}
private:
char sex;
short grade;
string name;
friend ostream& operator<<(ostream& out, const Learner& lern) {
return out << lern.name << ", " << lern.grade << ", " << lern.sex;
}
friend istream& operator>>(istream& inp, Learner& lern) {
cout << "Ф. И. О.: ";
getline(inp, lern.name);
cout << "Пол (м/ж): ";
lern.sex = inp.get();
cout << "Класс (1-11): ";
inp >> lern.grade;
flush(inp);
return inp;
}
};
class Sheet {
public:
void add(const Learner& lern) {
sheet.push_back(lern);
}
void add(const size_t quant) {
if (quant) {
Learner lern;
for (auto i = 0U; i < quant; ++i) {
cin >> lern;
sheet.push_back(lern);
}
}
}
friend ostream& man_6th_grade(ostream& out, const Sheet& sh) {
for (const auto& record : sh.sheet) {
if (record.get_grade() == 6 && record.get_sex() == 'м') {
cout << record << '\n';
}
}
return out;
}
private:
vector<Learner> sheet;
};
int main() {
system("chcp 1251 > nul");
Sheet sheet;
sheet.add(8);
man_6th_grade(cout, sheet);
system("pause > nul");
}
Azamat Polatov
почему при выборе пола (м/ж) программа виснет? Все же благодарю вас за ваш труд, но на ваш вопрос ответить не могу (
Azamat Polatov

Похожие вопросы
- Передача в метод класса указателя на функцию C++
- Программирование с использованием дружественных классов и методов.
- Функцию или оператор надо сделать для класса? Cи++
- В QtCreator для Qt 4.8 (и 5 может также), у класса формы главной, функция конструктор, делает не понятное наследование?
- Создать простой класс, конструктор, и несколько функций. Не могу решить задачу, плохо понял тему, помогите пожалуйста.
- Можно ли создать игру на юнити имея 0 знаний в програмировании?
- Не могу разобраться. Функция удаления отрицательных элементов вектора
- Как в функции распечатать двумерный динамический массив в Си
- Как завершить условие в функции?
- Возвращение функции return func(); (Си)