Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольные вопросы + ответы.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
323 Кб
Скачать
☆
  1. Проблема создания и уничтожения объектов

Для всех объектов должна быть выполнена инициализация (задание их

начального состояния). Способ решения проблемы: определение обычного метода для

инициализации. Недостаток подхода: можно забыть его вызвать или вызвать

несколько раз. Решение в ООП: использование конструктора – специального метода, вызываемого для объекта автоматически при его создании. Конструкторы глобальных объектов выполняются до начала работы функции main().

Синтаксис конструктора: имяКласса(списокПараметров)

generator::generator(float a, float b, float c, int d)

:ymedium(a),amplitude(b),discrete(c),generatorwork(d) {}

Деструктор – специальный метод класса, который вызывается для объекта

автоматически при его уничтожении. Главная задача деструктора – освобождение ресурсов.

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

generator::~generator() {}

new и delete

int main()

{

SlotMachine* orange = createOrangeMachine();

//...

delete orange;

return 0;

}

SlotMachine* createOrangeMachine()

{

return new SlotMachine(5);

}

  1. Понятие ссылки. Операции над ссылками и способы применения ссылок.

Синтаксис доступа по имени: имяОбъекта.имяЧлена

Объявление указателя на объект: имяКласса* имяУказателя;

Синтаксис доступа по указателю: имяУказателя->имяЧлена

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

Ссылка – альтернативное имя объекта. Объявление ссылки на объект:

имяКласса& имяСсылки = имяОбъекта;

Способы использования ссылки – создание независимой ссылки, для

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

функции.

  1. Статические и постоянные члены класса. Встраиваемые методы.

Cчетчика объектов: При создании в конструкторе увеличивать, а при уничтожении в деструкторе уменьшать его значение. Глобальную переменную использовать нельзя – есть вероятность конфликта и отсутствие инкапсуляции. Решение – использование статической переменной состояния. Она разделяется между экземплярами класса. Не является частью объекта, но является частью класса. Объявление статической переменной состояния выполняется в определении класса: static тип имяПеременной; Статическая переменная состояния определяется в файле-реализации класса: тип имяКласса::имяПеременной;

Решение второй проблемы – использование статического метода для выполнения требуемой операции. Объявление статического метода в определении класса: static тип имяМетода(параметры);

Объекты и переменные, которые после инициализации не должны менять своего состояния, необходимо объявлять константными: const тип имяПеременной(параметры);

Допустимые операции над постоянными объектами – те, которые не меняют его состояния.

Объявление метода не меняющим состояния объекта, для которого он вызван, выполняется в определении класса: тип имяМетода(параметры) const;. В определении метода также указывается ключевое слово const.

Встраивание функций и методов

Проблема эффективности реализации «коротких» методов: canDrink, getCount и деструктора.

Решение проблемы без нарушения инкапсуляции – использование встраиваемых методов.

Отличие встраиваемых методов от обычных – подстановка тела метода в точке его вызова.

Варианты определения метода встраиваемым:

– включение реализации метода в определение класса;

– приведение реализации метода в файле, содержащем определение класса, со спецификатором inline.

inline bool SlotMachine::canDrink() const

{

return drinkMoney >= drinkPrice;

}

Недостатки использования встраиваемых методов – объем исполняемой программы и открытая реализация.

Рекомендации по использованию: очень короткие и приводить реализацию вне определения класса. В противном случае смешиваются акценты «что» делает класс с «как» делает класс.