Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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

Date: 2016-05-13; view: 338; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.011 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию