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

11. Характеристика элементов-данных класса.

Определение данных класса внешне аналогично описанию переменных базовых или производных типов. Однако при описании данных класса не допускается их инициализация. Для их инициализации должен использоваться автоматический или явно вызываемый конструктор. Принадлежащие классу функции имеют полный доступ к его данным. Для доступа к элементам-данным из операторов, выполняемых вне определения класса нужно использовать операции выбора компонентов класса ( "." или "–>"). Данные класса не обязательно должны быть определены или описаны до их первого использования в принадлежащих классу функциях. Все компоненты класса "видны" во всех операторах его тела. Область доступа к компонентам-данным регулируется модификатором доступа.

Компоненты-данные могут быть описаны как const. В этом случае после инициализации они не могут быть изменены.

Компоненты-данные могут быть описаны как mutable. В этом случае они являются изменяемыми, даже если объект, содержащий их, описан как const.

12. Характеристика методов класса. Использование операции привязки «::»

Компонентная функция должна быть обязательно описана в теле класса. При определении классов их компонентные функции могут быть специфицированы как подставляемые (inline).

Функции и переменные, объявленные внутри объявления класса, становятся, как говорят, членами (members) этого класса. По умолчанию все функции и переменные, объявленные в классе, становятся закрытыми для класса. Это означает, что они доступны только для других членов того же класса. Для объявления открытых членов класса используется ключевое слово public, за которым следует двоеточие. Все функции и переменные, объявленные после слова public, доступны как для других членов класса, так и для любой другой

части программы, в которой находится этот класс. Функции, которые объявляются внутри класса, называются

функциями-членами (member functions).

Два двоеточия называются оператором расширения области видимости (scope resolution operator). Например, далее показан способ определения функций-членов set_a() и get_a():

void myclass : : set_a (int num)

{a=num;}

int myclass: :get_a (}

{return a;}

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

Тип возвр значения имя класса: : имя функция (список параметров)

{. . .// тело функции}

13. Указатель «this». Пример явного использования.

Когда функция-элемент ссылается на другой элемент какого-то объекта данного класса, откуда у С++ берется уверенность, что имеется ввиду соот­ветствующий объект? Ответ заключается в том, что каждый объект сопровождается указателем на самого себя — называемым указателем this — это неявный аргумент во всех ссылках на элементы внутри этого объекта. Указатель this можно использовать также и явно. Каждый объект может определить свой собственный адрес с помощью ключевого слова this.

Указатель this неявно используется для ссылки как на данные-элементы, так и на функции-элементы объекта. Тип указателя this зависит от типа объекта и от того, объявлена ли функция-элемент, в которой используется this, как const. В неконстантной функции-элементе класса Employee указатель this имеет тип Employee * const (константный указатель на объект Employee). В константной функции-элементе класса Employee указатель this имеет тип const Employee * const (константный указатель на объект Employee, который тоже константный).

Несмотря на то, что указатель на объект не передаётся явно, к нему можно получить доступ внутри метода. Его имя - this (this - этот; читается как нечто среднее между вис и зис). Давайте посмотрим на пример использования этого указателя:

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

Пример:

class test

{

public:

int* a;

test() // конструктор

{ a = new int;}

test (test& t) // копирующий конструктор

{ a = new int;

memcpy (a, t.a, 4); }

test& operator= (test& t) // операция присваивания

{ a = new int;

memcpy (a, t.a, 4);

return (*this); }

~test() // деструктор

{ delete a;}};

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