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

8. Определение класса. Объявление объектов класса. Обращение к объектам

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

Конструкция типа:

class X {...};

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

Определение объекта предполагает выделение области памяти, достаточное для размещения данных-членов объекта и организацию ссылки на объект.

В C++ существует множество способов определения (создания) объектов.

В частности, объект может быть создан:

  • как глобальная переменная,

  • как локальная переменная,

  • как элемент области активации при вызове функции,

  • при явном обращении к конструктору,

  • в результате выполнения выражения размещения,

  • как временная переменная.

9.Инициализация полей объектов. Конструкторы. Конструктор по умолчанию

В объектно-ориентированном программировании конструктор класса (от англ. constructor, иногда сокращают ctor) — специальный блок инструкций, вызываемый при создании объекта.

Некоторые языки программирования различают несколько особых типов конструкторов:

  • конструктор по умолчанию — конструктор, не принимающий аргументов;

  • конструктор копирования — конструктор, принимающий в качестве аргумента объект того же класса (или ссылку из него);

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

Конструктор по умолчанию

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

10.Копирующий конструктор

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

Как правило, набор конструкторов для разных типов инициализирующих значений обеспечивается разработчиком класса. Скажем, чтобы инициализировать класс A типом int, программист должен предусмотреть в классе конструктор A(int), и так далее. Но есть два исключения из этого правила. Первое - когда создаваемый объект явно не инициализируется:

A a;

Второе - когда объект инициализируется другим объектом того же типа:

A a; A b(a);

В этих случаях, даже если вы не написали соответствующий конструктор, транслятор создаст его автоматически. В первом случае это будет конструктор по умолчанию (default constructor), о котором я рассказывал на прошлом занятии. Во втором - так называеымй копирующий конструктор (copy constructor

11. Конструктор с параметром

Чтобы получать каждый раз объекты с новыми значениями свойств, используется конструктор с параметрами:

class Printer

{

public:

//Конструктор с параметрами

Printer(char* _model, int _year);

};

где _model – имя параметра, соответствующего значению модели, _year – имя параметра, соответствующего значению года.

12. Деструкторы

Для разрушения объекта используется метод, называемый деструктором. Для деструктора, также как и конструктора, не указывается тип возвращаемого значения, имя совпадает с именем класса, только перед именем помещается знак ~ (тильда).

Деструктор не имеет параметров и включается в раздел public:

class Printer

{

public:

Printer(char* _model, int _year); //Конструктор //с параметрами

~Printer(); //Деструктор

};

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

13. Наследование – это такое отношение между классами, когда один класс повторяет структуру и поведение другого класса (одиночное наследование) или других классов (множественное наследование). Наследование в C++:

class A{ //базовый класс

};

class B : public A{ //public наследование

};

class C : protected A{ //protected наследование

};

class Z : private A{ //private наследование

};

14. Наследование Конструкторы и деструкторы производных классов

Наследование – это такое отношение между классами, когда один класс повторяет структуру и поведение другого класса (одиночное наследование) или других классов (множественное наследование).

. Конструктор базового класса вызывается автоматически и выполняется до конструктора производного класса. Конструктор производного класса вызывается по окончании работы конструкторов базовых классов. Параметры конструктора базового класса указываются в определении конструктора производного класса. Пример

class Basis { public:   Basis(int x, int y)   {     a = x;     b = y;   } private:   int a, b; }; class Inherit : public Basis { public:   Inherit(int x, int y, int s)   : Basis (x, y)   {     sum = s;   } private:   int sum; };

Как мы знаем, объект уничтожается при завершении программы или при выходе из области действия определения объектов и эти действия выполняет деструктор. Статус деструктора по умолчанию public. Деструкторы не наследуется, поэтому даже при отсутствии в производном классе деструктора, он не передается из базового, а формируется компилятором как умалчиваемый. Классы, входящие в иерархию, должны иметь в своем распоряжении виртуальные деструкторы. Деструкторы могут переопределяться, но не перегружаться.