1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//Листинг #1 Перегрузка >> Как научить cin взаимодействовать с объектом Листинг #1 #include <iostream> using std::istream; using std::cin; class Student{ public: friend istream& operator >> (istream&, const Student&); //Прототип функции, сама функция вынесена за класс }; istream& operator >> (istream& stream, const Student& object){ //Сама функция, перегрузка операции >> return stream; } int main(){ Student st; cin >> st; } |
Там подробно описывается, что происходит и почему так.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//Листинг #2 Перегрузка >> Как научить cin взаимодействовать с объектом Листинг #2 #include <iostream> using std::istream; using std::cin; using std::cout; class Student{ char FirstName[255]; //Имя char LastName[255]; //Фамилия char course[255]; //Курс public: friend istream& operator >> (istream&, Student&); //Прототип функции, сама функция вынесена за класс }; istream& operator >> (istream& stream, Student& object){ //Сама функция, перегрузка операции << cout << "input first name:\t"; stream >> object.FirstName; cout << "input last name:\t"; stream >> object.LastName; cout << "input course: \t"; stream >> object.course; return stream; } int main(){ Student st; cin >> st; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
//Листинг #3 Комбинируем перегрузку >> и << Как научить cin и cout взаимодействовать с объектом Листинг #3 #include <iostream> using std::istream; using std::ostream; using std::cin; using std::cout; class Student{ char FirstName[255]; //Имя char LastName[255]; //Фамилия char course[255]; //Курс public: friend istream& operator >> (istream&, Student&); //Прототип функции, сама функция вынесена за класс (ввод) friend ostream& operator << (ostream&, Student&); //Прототип функции, сама функция вынесена за класс (вывод) }; istream& operator >> (istream& stream, Student& object){ //Сама функция, перегрузка операции >> cout << "input first name:\t"; stream >> object.FirstName; //сейчас stream вместо cin, но в ином случае вместо cin могут другие объекта потока ввода cout << "input last name:\t"; stream >> object.LastName; cout << "input course: \t"; stream >> object.course; return stream; } ostream& operator << (ostream& stream, Student& object){ //Сама функция, перегрузка операции << stream << object.FirstName << '\n'; //сейчас stream - это cout, но в ином случае вместо cout могут быть другие объекты потока вывода stream << object.LastName << '\n'; stream << object.course << '\n'; return stream; } int main(){ Student st; cin >> st; //Ввели cout << st; //Вывели (cin.ignore()).get(); //Если окно закрывается сразу, задерживаем } |
1 2 3 4 5 6 7 8 9 10 11 |
istream& operator >> (istream& stream, Student& object){ //Сама функция, перегрузка операции >> cout << "input first name:\t"; stream >> object.FirstName; //если не нужны пробелы, то можно так cout << "input last name:\t"; stream.getline(object.LastName,255); //если нужны пробелы, то так cout << "input course: \t"; stream.getline(object.course, 255); //если нужны пробелы, то так return stream; } |
Добавить комментарий