Перевантаження операцій h2>
Цей клас ostream визначає операцію <<,
щоб зробити зручним висновок декількох об'єктів одним оператором. Давайте
подивимося, як це зроблено. p>
Щоб визначити @, де @ - деяка операція мови C + +,
для кожного визначається користувачем типу ви визначаєте функцію з ім'ям
operator @, яка отримує параметри відповідного типу. Наприклад: p>
class ostream ( p>
//... p>
ostream
operator <<(char *); p>
); p>
ostream ostream:: operator <<(char * p) p>
( p>
while (* p)
buf.sputc (* p ++); p>
return * this; p>
) p>
визначає операцію <<як член класу ostream,
тому s < "); p>
а якщо застосувати операцію взяття адреси, то ви отримаєте
адреса об'єкта, на який посилається посилання: p>
& s1 == & my_out p>
Перша очевидна користь від посилань полягає в тому, щоб
забезпечити передачу адреси об'єкта, а не самого об'єкта, у функцію виводу (в
деяких мовах це називається передачею параметра за посиланням): p>
ostream & operator <<(ostream & s, complex
z) ( p>
return s
<< "(" <
) p>
Досить цікаво, що тіло функції залишилося без
змін, але якщо ви будете здійснювати присвоювання s, то будете
впливати на сам об'єкт, а не на його копію. У даному випадку те, що
повертається посилання, також підвищує ефективність, оскільки очевидний спосіб
реалізації посилання - це покажчик, а передача покажчика набагато дешевше, ніж
передача великої структури даних. p>
Посилання також істотні для визначення потоку введення,
оскільки операція введення отримує як операнда змінну для
зчитування. Якщо б посилання не використовувалися, то користувач повинен був би
явно передавати їх індекси у функції введення. p>
class istream ( p>
//... p>
int state; p>
public: p>
istream &
operator>> (char ≈); p>
istream &
operator>> (char *); p>
istream &
operator>> (int &); p>
istream &
operator>> (long &); p>
//... p>
); p>
Зауважте, що для читання і long int використовуються різні
функції, тоді як для їх друку була потрібна тільки одна. Це цілком звичайно, і
причина в тому, що int може бути перетворено в long за стандартними правилами
неявного перетворення, позбавляючи таким чином програміста від занепокоєння із
приводу написання обох функцій введення. p>
Список літератури h2>
Для підготовки даної роботи були використані матеріали
з сайту http://www.realcoding.net
p>