Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
госы 2 раздел.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
39.8 Кб
Скачать

6.Использование this

  Каждый объект содержит свой экземпляр полей класса. Методы класса находятся в памяти в единственном экземпляре и используются всеми объектами совместно, поэтому необходимо обеспечить работу методов с полями именно того объекта, для которого они были вызваны. Это обеспечивается передачей в функцию скрытого параметра this, в котором хранится константный указатель на вызвавший функцию объект. Указатель this неявно используется внутри метода для ссылок на элементы объекта. В явном виде этот указатель применяется в основном для возвращения из метода указателя (return this;) или ссылки (return *this;) на вызвавший объект. 

Допустим имеется некий метод в неком классе. При вызове этого метода ему передается автоматически неявно заданный аргумент, который представляет собой ссылку на вызывающий объект. Эта ссылка и называется ключевым словом this. В большинстве случаев программисты им не пользуются. Но из this можно иногда извлечь пользу. Например, синтаксис С# допускает, чтобы имя параметра или локальной переменной совпадало с именем переменной экземпляра. В этом случае локальное имя будет скрывать переменную экземпляра. И тогда доступ к скрытой переменной экземпляра можно получить с помощью ссылки this. Например, следующий фрагмент кода (хотя его стиль написания не рекомендуется к применению) представляет собой синтаксически допустимый способ определения конструктора в классе:  public Rect(int width, int height)  {  this.width = width;  this.height = height;  }  В этой версии конструктора имена параметров совпадают с именами переменных экземпляра, в результате чего за первыми скрываются вторые, а ключевое слово this как раз и используется для доступа к скрытым переменным экземпляра. 

7.Перегрузка операций.

 С++ позволяет переопределить действие большинства операций так, чтобы при использовании с объектами конкретного класса они выполняли заданные функции. Эта дает возможность использовать собственные типы данных точно так же, как стандартные. Обозначения собственных операций вводить нельзя. Можно перегружать любые операции, существующие в С++, за исключением:

.

.*

?:

::

#

##

sizeof

    Перегрузка операций осуществляется с помощью методов специального вида (функций-операций) и подчиняется следующим правилам:

  • при перегрузке операций сохраняются количество аргументов, приоритеты операций и правила ассоциации (справа налево или слева направо), используемые в стандартных типах данных;

  • для стандартных типов данных переопределять операции нельзя;

  • функции-операции не могут иметь аргументов по умолчанию;

  • функции-операции наследуются (за исключением =);

  • функции-операции не могут определяться как static.

    Функцию-операцию можно определить тремя способами: она должна быть либо методом класса, либо дружественной функцией класса, либо обычной функцией. В двух последних случаях функция должна принимать хотя бы один аргумент, имеющий тип класса, указателя или ссылки на класс.      Функция-операция содержит ключевое слово operator, за которым следует знак переопределяемой операции:

тип operator операция ( список параметров) { тело функции }