Свойства локальных классов



– внутри локального класса можно использовать типы, статические (static) и внешние (extern) переменные, внешние функции и элементы перечислений из области, в которой он описан; запрещается использовать автоматические переменные из этой области;

– локальный класс не может иметь статических элементов;

– методы этого класса могут быть описаны только внутри класса;

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

Указатель this

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

Конструкторы

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

имя_класса (список параметров);

//создается объект без имени (список параметров может быть пустым)

Свойства конструкторов:

– конструктор не возвращает значение, даже типа void; нельзя получить указатель на конструктор;

– класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки);

– конструктор, вызываемый без параметров, называется конструктором по умолчанию;

– параметры конструктора могут иметь любой тип, кроме этого же класса; можно задать параметры по умолчанию, но их может содержать только один из конструкторов;

– если программист не указал ни одного конструктора, то компилятор создаст его автоматически;

– конструкторы не наследуются;

– конструкторы нельзя описывать с модификаторами const, virtual и static;

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

– конструктор вызывается, если в программе встретилась какая-либо из синтаксических конструкций:

имя_класса имя_объекта [(список параметров)];

//список параметров не должен быть пустым

имя_класса (список параметров);

//создается объект без имени (список параметров может быть пустым)

имя_класса имя_объекта = выражение;

//создается объект без имени и копируется

Например,

point p1(10,10), p2(20), p3;

point p4 = point(100);

point p5 = 200;

Деструкторы

Деструкторы - это функции, которые используются для выполнения определенных операций при удалении объекта. Обычно деструкторы выполняют операции, обратные тем, которые выполняли конструкторы. Например, если конструктор выделяет динамическую память для членов класса, то деструктор ее освобождает.

Деструктор вызывается автоматически,

– для локальных объектов – при выходе из блока, в котором они объявлены;

– для глобальных – как часть процедуры выхода из main;

– для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete (автоматический вызов деструктора объекта при выходе из области действия указателя на него не производится).орв

Между конструктором и деструктором существует ряд различий.

1. Деструкторы могут быть виртуальными, а конструкторы – нет.

2. Деструкторам нельзя передавать аргументы.

3. В каждом классе может быть объявлен только один деструктор.

Имя деструктора состоит из имени класса, перед которым стоит ~ (тильда).

class point

{…

public:

point () {x=0; y=0;}

~point() {};

};

 


Дата добавления: 2015-12-18; просмотров: 18; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!