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

50. Методы. Основные правила работы с методами. Константные методы. Статические методы.

Основные правила работы с методами в С++:

  • метод – функция определена внутри класса

  • в определении класса метод может быть либо определен полностью (встроенной функцией), либо объявлен как прототип и тогда вне класса необходимо давать его полное внешнее описание

Пример:

Point.Krit_point ( ); // (1) вызов метода непосредственно от имени объекта с использованием операции •

Ptr Point → Krit_point ( ); // (2) “→” выбор элемента пол указателю

Если метод (… А) определяется с private или protected, то к нему можно обратиться внутри другого открытого метода (… В), при этом к методу А следует обращаться только по его имени.

Указатель на объект будет присоединен к имени методу, и это будет указывать на тот объект от которого обратились к методу (… В). Помимо обычных методов можно определить конструктор и статические методы.

Константные методы:

  • объявляются с const после списка параметров

  • они могут обращаться к любым полям, но не могут менять значения полей, поэтому такие методы рекомендуется создавать для работы с константными объектами

  • они могут вызывать только константные методы

  • они могут вызываться от любых не только константных объектов

Статические методы:

  • к ним можно обращаться не только от имени объекта, но и от имени класса, в том числе до создания хотя бы одного объекта этого класса, при этом используются квалифицированные имена, то есть операции доступа видимости класса

static void Print_Couter ( ); // (3)

Назначение которое выводит в консольное окно значение счетчика FCounter, FLivePoint, тогда полное определение вне класса должно быть таким:

Void TTochka_v_pole:: PointCounter ( ) // (4)

{cout << “поле FLIvePrint = “ << FCouter << endl; // (5)

сout << “поле FLivePoint = “ << FLivePoint << endl;} // (6)

TTochka_v_pole:: PointCounter ( ); // (7) обращаемся от имени класса

Point.PrintCounter ( ); // (8) обращаемся от имени объекта

Другие особенности статических методов:

  • в их теле непосредственно можно обратиться к статическим полям и методам

  • они не могут быть константными или виртуальными (virtual)

51. Указатель this.

Рассмотрим вопрос о механизме обращения к полю А или методу В внутри другого не статического метода С. В этом случае нужно применять только неквалифицированные имена А или В, к которым будут присоединены указатели на тот объект от имени которого обратились к С. Для примера приведем 2 фрагмента.

Point4.Vivod_v_consol ( ); // (1) от имени объекта Point4 обращаемся к открытому нестатическому полю vivod_v_consol

cout << Fmax Z; // (2) здесь к полю Fmax Z обращается не указатель имени объекта

Вопрос:

«Как компилятор «догадывается», что в операторе 2 имеется ввиду поле Fmax Z именно Point4?»

Причина в том, что согласно С++, каждый нестатический метод передает скрытые параметры this(служебное слово), в нем хранятся константные указатели именно на тот объект от которого был вызван не статический метод Point4. Именно этот указатель неявно используется внутри метода. Благодаря этому при компиляции вывод из строки 2 превращается в:

cout << this → Fmax Z // (3)

Строка 3 могла бы появиться явно вместо строки 2.

В статических методах указатель this не передается. (Это понятно простому сибирскому ежику :D)

Помимо рассмотренного конструктора С++ допускает использование указатели на поля данных и на методы класса • и →.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]