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

31.2 Основные свойства конструкторов:

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

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

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

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

Конструктор по умолчанию (без параметров)

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

Конструктор копирования

имя_класса () : список_инициализации {

[операторы_инициализации;]}0

имя_класса (список_параметров) : список_инициализации {

[операторы_инициализации;]

}

имя_класса (имя_класса &) : список_инициализации {

[операторы_инициализации;]

}

31.3 Деструктор — это специальный метод класса, применяющийся для освобождения памяти, занимаемой объектом.

Особенности деструкторов:

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

Всегда описывается в секции public

Не имеет ни типа, ни параметров

Деструктор:

не перегружается;

не может быть объявлен как const или static;

не наследуется;

может быть виртуальным.

Worker::~ Worker( )

{

delete [ ] post; }

33.Назовите операторы, которые можно перегружать в классе, приведите синтаксис записи перегруженного оператора в контексте языка С++, поясните, что представляет собой такое явление, как перегрузка, приведите пример перегрузки операторов.

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

Можно перегружать любые операции, существующие в С++, за исключением:

. ?: :: # sizeof

Синтаксис : тип operator операция (список_параметров) { тело_функции }

Перегрузка операторов — в программировании — один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются. Перегрузка операций осуществляется с помощью методов специального вида ( функций-).функций операций

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

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

- чаще всего инициализирует данные класса нулевыми значениями.

Формат: имя_класса () : список_инициализации {

[операторы_инициализации;]

}Формат

Пример:

Worker( ):code(0),salary(0),post(″″)

{ fio[0]=′\0′ }

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

- инициализирует поля класса значениями полученных параметров.

Формат: имя_класса (список_параметров) : список_инициализации {

[операторы_инициализации;]

}

32.2 Конструктор копирования

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

Формат:

имя_класса (имя_класса &) : список_инициализации {

[операторы_инициализации;]

}

Вызов конструктора:

имя_класса имя_объекта;

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

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

Например:

sameClass obj1, masObj[10]; // вызывается

// конструктор без параметров

sameClass obj2 (23, 45, 1); // вызывается

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

sameClass obj3 (obj2); // вызывается

// конструктор копирования

35.2Синтаксис:

class Manager : public Worker{

char category [20];

public:

void getdata() {

Worker::getdata();

void putdata() const {

Worker::putdata();

};cout << “Категория: ” ; cin >>category; }cout <<“Категория: ”<<category; }

34.3 Пример: class Time {

hour, minute, second;

public:

Time() : hour(0), minute(0),second(0) { }

hour(h), minute(m), second(s) { }

Time (Time &t) : hour(t.hour),

minute(t.minute), second(t.second) { }

…// friend ostream& operator «

friend istream& operator »( istream& i_str,

Time& t);

};int Time(int h, int m = 0, int s = 0): заменяем функцию show() функцией-операцией: ( ostream& o_str, Time t);

ostream& operator « ( ostream& o_str, Time t){

o_str « t.hour « ':' « t.minute « ':' «

t.second « endl;

return o_str;

} () {

Time t1(12,35,45), t2;

cin » t2;

cout « endl « t1 « t2;

Time t3;

;return 0;}

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

Дружественные функции применяются для доступа к скрытым полям класса и представляют собой альтернативу методам.

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

34.2Правила описания и особенности дружественных функций. Дружественная функция объявляется внутри класса, к элементам которого ей нужен доступ, с ключевым словом friend. В качестве параметра ей должен передаваться объект или ссылка на объект класса.

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

Одна функция может быть дружественной сразу нескольким классами.

35. Запишите синтаксис объявления класса потомка в контексте языка С++, поясните, что представляет собой такое явление, как простое наследование, поясните, как осуществляется управление доступом при наследовании, приведите пример.

Класс является абстрактным типом данных данных, пользователем, и в и с ними. определяемым пользователем представляет собой модель реального объекта виде данных функций для работы ними полями, а – методами. и класса.функции класса методами Поля методы называются элементами класса Данные класса называются полями

class <имя> {

<элементов> описание скрытых элементов

<элементов> описание доступных элементов [ private:] public: } ;Простым называется наследование, при котором производный класс имеет одного родителя.Возможность обращения к элементам этих классов регулируется с помощью ключей доступа private, protected и public.

36.Поясните, что представляет собой такое явление, как множественное наследование, запишите синтаксис объявления класс-потомка от нескольких предков в контексте языка С++, поясните, чем отличается перегрузка от переопределения методов в классах-потомках, приведите пример множественного наследования.

Множественное наследование означает, что класс имеет несколько базовых классов.

Множественное наследование применяется для того, чтобы обеспечить производный класс свойствами двух или более базовых.

Переопределение метода выполняется только в том случае, если имена и сигнатуры типов двух методов идентичны. В противном случае два метода являются просто перегруженными. Например, рассмотрим измененную версию предыдущего примера.

38.Поясните, что представляют собой абстрактные классы в контексте языка С++, их назначение, приведите пример создания абстрактного класса.

Базовый класс, объекты которого никогда не будут реализованы, называется абстрактным классом.

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

– это метод, после объявления которого добавлено выражение =0.Например: virtual void f(int)=0;Чисто виртуальный метод

пример:class CA { // Абстрактный класс

public: CA ( void ) { std::cout << "This object of the class ";}

virtual void Abstr ( void ) = 0; // Чистая (пустая) виртуальная функция.

void fun ( void ) { std::cout << "Реализация не будет наследоваться!"; }

~CA () { std::cout << "." << std::endl; } //Вызывается в обр. порядке конструкторов};

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