Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Козак Н.В. Лекции Основы создания программ в Си...doc
Скачиваний:
24
Добавлен:
23.09.2019
Размер:
2.24 Mб
Скачать

Указатель this

Любая функция класса, не являющаяся статической (что это такое, выяснится позднее) имеет доступ к объекту, для которого она вызвана, через посредство ключевого слова this. Типом this является *имя_класса.

class Dummy

{

void someFunc(void) {...};

public:

Dummy();

};

Dummy::Dummy()

{

someFunc ();

this->someFunc();

(*this).someFunc();

}

Лекция.3.Элементы класса Статические элементы класса

Можно объявить элемент класса (данные или функцию) как статический.

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

Он только один, вне зависимости от того, сколько представителей имеет класс. На самом деле статический элемент данных существует даже в том случае, когда никаких представителей класса не создано.

Помимо объявления в определении класса, статический элемент данных должен еще и определяться:

class SomeClass

{

static int iCount; // Объявление статического элемента.

//...

};

int SomeClass::iCount = 0; // Определение статического элемента.

Обращаться к открытым статическим элементам класса можно либо через любой его представитель операциями "." и "->", либо путем квалификации области действия (SomeClass::iCount). Последний способ предпочтитель­нее, так как ясн< показы ает, что элемент не связан с конкретным объектом.

Статические элементы-функции

Функция класса, объявленная с модификатором static, не связывается ни с какими его конкретными представителями. Другими словами, ей не передается указатель this в качестве скрытого параметра. Это означает, что:

  • Статическая функция класса может вызываться, даже если никаких представителей класса не существует.

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

  • Такая функция не может быть объявлена виртуальной.

  • Статические функции класса могут передаваться процедурам API Windows в качестве возвратно-вызываемых, поскольку не предполагают наличия на стеке параметра this. Обычные функции класса для этого не годятся.

Специальные элементы-функции класса

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

  • Конструктор. Инициализирует представители класса.

  • Конструктор копии. Инициализирует новый представитель, используя значения существующего Объекта.

  • Операция присваивания. Присваивает содержимое одного представителя класса другому.

  • Деструктор. Производит очистку уничтожаемого объекта.

  • Операция new. Выделяет память для динамически создаваемого объекта.

  • Операция delete. Освобождает память, выделенную под динамический объект.

  • Функции преобразования. Преобразуют представитель класса в другой тип (и наоборот).

Конструктор

Конструктор имеет то же имя, что и класс. Он вызывается компилятором всегда, когда создается новый представитель класса. Если в классе не определен никакой конструктор, компилятор генерирует конструктор по умолчанию (не имеющий параметров). Относительно конструкторов имеют место такие правила:

□ Для него не объявляется тип возвращаемого значения.

□ Он не может возвращать значений оператором return.

□ Конструктор не наследуется.

□ Конструктор не может быть объявлен как const, volatile, virtual или static.

Поскольку конструктор не возвращает значений, то для сигнализации об ошибке при инициализации объекта, если требуется, нужно применять механизм управления исключениям.