Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Операция выбора элементаПерегруженная функция operator-> считается унарной постфиксной операцией. Они применяется либо к объектам класса, либо к ссылке на объект класса, для которого она перегружается. Функция operator-> обязательно должна быть членом класса и должна возвращать либо объект класса, либо указатель на класс. К указателю на класс автоматически применяется предопределенная операция выбора ->. Если функция operator-> возвращает объект класса, то для этого класса должна быть также определена пользовательская функция operator->, которая будет применена результату первой. На заключительной стадии всегда выполняется предопределения операция выбора, поэтому, по крайней мере, одна из пользовательских функций операций должна возвращать указатель на класс. Если операция -> перегружена для класса X, тогда выражение х->m, где х объект класса X, интерпретируется как (x/operator->())->m Обычно операцию -> имеет смысл перегружать в случае большой вложенности классов один в другой. Пример. сlass N {... public: char str[20]; ... }; //N class Node {N *cln; public: ... N *operator->() {return cln;} ... }; //Node class List { Node *start; public: Node operator->() {return *start;} ... }; void main() { List mylist, *plist; List &l=mylist; cout<<mylist->str<<l->srt; // правильно cout<<plist->str; // Ошибка, т.к. plist- // указатель, следовательно //компилятор не может выбрать между // предопределенной операцией и перегруженной } Выражение mylist->str. Операция -> для класса List возвращает объект класса Node. Для класса Node в свою очередь перегружена операция ->, которая возвращает указатель на объект класса N, поэтому она применяется вслед за первой. На заключительной стадии применима предопределенная операция ->, поэтому выражение mylist -> str интерпретируется следующим образом: ((mylist.operator->()).Node::operator -> ())->str
|