Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Создание объектов. Конструкторы и деструктор

Лаборатоная работа № 6 | Лабораторная работа № 7 | Функции обработки строк типа AnsiString | Лаборатоная работа № 8 | Теоретические сведения | Сведения о гражданине ind1 | Лабораторная работа № 9 | Лабораторная работа № 10 | Лабораторная работа № 11 | Сущности и Объекты |


Читайте также:
  1. Более того, — постановочная работа и создание сценария на эстраде часто представляет собой единый и неразрывный процесс.
  2. Воссоздание земных поселений.
  3. Денежная машина информационного бизнеса: создание постояннойклиентской базы
  4. Для формирования самоактуализирующейся личности необходимо создание ряда педагогических условий.
  5. Запрос на создание таблицы
  6. Картографирование»: создание «карт» для описания территории
  7. Ключ №3: Ты должен воспринять полную ответственность за создание отношений близости.

C++ обеспечивает удобные способы создания и удаления объектов, через специальные процедуры создания объектов (конструкторы) и процедуру уничтожения (деструктор). Конструкторы автоматически вызываются при описании объекта, а деструкторы – при выходе из блока, в котором этот объект был описан. Если необходимые конструкторы или деструктор для класса не описаны, то транслятор создает их сам.

Конструкторы имеет то же имя, что и класс, а деструкторы наследуют имена своих классов, с добавлением лидирующего знака тильда '~'.

Конструкторы могут вызываться явно или неявно – через обращение во время объявления объекта. Задавая объекту параметры, вы сообщаете об их передаче непосредственно конструктору:

Account myAccount(10001);

Account *pExtraAccount = new Account(10002);

Как и конструкторы, деструкторы могут вызываться явно (при помощи оператора С++ delete) или неявно – при выходе объекта из области действия, например:

{

Account myAccount(10001);

Account *pExtraAccount = new Account(10002);

//...

delete pExtraAccount; // <<< явный вызов деструктора

} // <<< неявный вызов деструктора для myAccount

Класс может иметь несколько конструкторов с различными параметрами, в то время как деструктор задается один и не имеет параметров.

Методы

Классы С++ могут содержать в качестве своих элементов данные и функции-элементы. Функция элемент – это функция, объявленная внутри определения класса и тесно связанная с типом этого класса. Функция элемент может объявляться в пределах своего класса, но определяться где-либо в другом месте программы.

Общий вид синтаксиса вызова метода выглядит как:

имя_класса_объекта.имя_функции(список аргументов);

В случае, если функция элемент объявлена, и определена в своем классе, то тогда она называется встроенной функцией. Это макрос-подобные функции, которые вставляются код исполнения, непосредственно в том месте откуда они вызываются – такая подстановка выполнит код функции сразу, экономя время необходимое для ее вызова. Этого же эффекта можно добиться, добавив в объявление и к телу функции, определенной вне класса ключевое слово inline. При определении функции вне класса необходимо использовать селектор области действия '::' между определяемым классом и функцией элементом.

В члене функции ключевое слово this указывает на объект, для которого вызвана функция. То есть в функцию элемент всегда «неявно» передается указатель на объект, который вызывает эту функцию.

Наследование

С++ позволяет множественное наследование, то есть способен брать существующие – базовые классы (один или несколько) и порождать от них новый класс – потомок, с наследованием всех атрибутов и поведения. Наследование позволяет на хорошем уровне разделять код и данные, а также разрешает полиморфизм.

Общий вид синтаксиса реализации наследования при объявлении класса:

class класс_потомок: <тип_доступа> базовый класс

[, <тип_доступа> базовый класс...]

По умолчанию элементы базового класса автоматически получают приватный (private) тип. Использование же ключевого слова public, при порождении потомка класса, делает все элементы базового класса общими в порожденном классе. Приватные элементы базового класса остаются приватными, и не будут доступны из потомков:

Тип доступа в базовом классе Тип доступа в потомке Доступность элемента базового класса
private private недоступен
protected private private
public private private
private public недоступен
protected public protected
public public public

Рассмотрим реальный пример:

class BaseA {

private: int privA;

protected: int protA;

public: int pubA;

};

class BaseB {

private: int privB;

protected: int protB;

public: int pubB;

};

class Derived: private BaseA, public BaseB {

public:

void func() {

// privA и privB недоступны!

protA = pubA = protB = pub = 0;

}

};

void main() {

Derived x;

// privA, protA, pubA, privB и protB - недоступны!

x.pubB = 1; // единственный доступный элемент!

}


Дата добавления: 2015-11-04; просмотров: 38 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Пример класса| Пример решения задания

mybiblioteka.su - 2015-2024 год. (0.006 сек.)