Перезавантаження cout і cin
В далі приведеній програмі 26.14 оператори видобування і вставки для класу Distance перезавантажені для роботи з cout та cin.
#include<iostream>
#include<conio>
using namespace std;
class Distance
{private:
int feet;
float inches;
public:
Distance():feet(0),inches(0.0)
{ }
Distance(int ft,float in):feet(ft),inches(in)
{ }
friend istream& operator>>(istream& s,Distance& d);
friend ostream& operator<<(ostream& s,Distance& d);
};
//////
istream& operator>>(istream& s,Distance& d)
{ cout<<”\nVvedit futy: “;s>>d.feet;
cout<<”\nVvedit dujmy: “;s>>d.inches;
return s;
};
////////////
ostream& operator<<(ostream& s,Distance& d)
{s<<d.feet<<”\’-“<<d.inches<<’\”’;
return s;
}
/////////////
int main()
{ Distance dist1,dist2;
Distance dist3(11,6.25);
cout<<”\nVvedit 2 znachenna vidstanej:”;
cin>>dist1>>dist2;
cout<<”\ndist1=”<<dist1<<”\ndist2=”<<dist2;
cout<<”\ndist3=”<<dist3<<endl;
getch();
return 0;
}
Програма 26.14
Програма запитує в користувача два значення відстаней (типу Distance), виводить їх, а також виводить значення, які були ініціалізовані в програмі. Зверніть увагу, як зручно і природно можна працювати з об’єктами типу Distance – цілком так само, як зі стандартними типами.
cin>>dist1>>dist2;
cout<<”\ndist1=”<<dist1<<”\ndist2=”<<dist2;
Оператори видобування і вставки перезавантажуються одинаковими способами. Вони повертають за посиланням об’єкт istream (>>) чи ostream (<<). Значення, що повертаються, можуть організовуватися в ланцюжки. Оператори мають по два аргументи, обидва передаються за посиланням. Перший аргумент >> - об’єкт класу istream (наприклад, cin). Відповдно, для << першим аргументом повинен бути об’єкт класу ostream (наприклад, cout). Другий аргумент - об’єкт класу, для якого здійснюється ввід/вивід (в даному прикладі це клас Distance). Оператор >> бере вхідні дані з потоку, вказаного в першому аргументі, і переносить їх у компонентні дані об’єкту, вказаного у другому. За аналогією, оператор << бере дані з об’єкту, вказаного у другому аргументі, і посилає їх в потік, що відповідає значенню першого аргумента.
Функції operator <<() та operator>>() повинні бути дружніми по відношенню до класу Distance, оскільки об’єкти istream та ostream знаходяться зліва від знаку операції.
Звичайно, для будь-яких інших класів можна перезавантажувати оператори вставки та видобування таким самим способом.
Дата добавления: 2015-08-26; просмотров: 538;