ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Конструкторы и деструкторы объектов классаЭто специальный вид методов, которые резервируются за классом, хотя с позиции теории типов данных они не должны им принадлежать. Назначение конструкторов – создание и инициализация объектов. Конструкторы по умолчанию – конструкторы без параметров, которые создаются компилятором автоматически, если пользователь этого не сделал сам. Конструктор имеет в точности то же имя, что и класс, и их может быть определено несколько, например, они могут различатся числом и типами параметров:
Stock::Stock(const char * co, int n, double pr) { strncpy(company, co, 29); company[29]=’\0’; shares = n; share_val = pr; set_tot(); } Stock::Stock()//конструктор по умолчанию, но определённый пользователем strcpy(company, “None”, 29); shares = 0; share_val = 0; set_tot(); }
Явные применения конструкторов в программе (2 синтаксически равноправные формы): Stock stock1(“NanoSoft”,12,97.0); Stock stock2 = Stock(“Boffo objects”,2,100.0); ... stock2 = stock 1;//поля stock1 копируются в stock2 … stock1 = Stock (“Nifty Foods”, 10, 93.05); //создаётся объект класса Stock и его поля //копируются в stock1, затем исходный объект уничтожается
Если бы конструктор с пустым списком не был задан, то компилятор создал бы его с пустым тело. Но тогда поля объекта были бы заполнены произвольно, т.е. мусором.
Деструкторы – их назначение: освобождение памяти, занятой под объект. Имя деструктора совпадает с именем класса, но с лидирующим символом ‘~’. Параметры отсутствуют. Деструктор по умолчанию: Stock::~Stock(){}
Пользовательские деструкторы нужны в том случае, если в конструкторе используются ораторы выделения динамической памяти (напр. new – для создания объекта в области heap – памяти). Тогда деструктор должен содержать оператор(ы) delete – освобождение памяти. Деструктор вызывается в тот момент, когда объект прекращает существование, например, когда закрывается блок, в котором объявляется переменная класса или когда завершается выполнение функции, в которой была декларирована переменная класса (и в некоторых других случаях).
Пример
Stock *p_stock, *pp_stock; … p_stock = new Stock; pp_stock = new Stock(“Boffo objects”);
Применение методов через указатель к объекту: p_stock->show();
2-й конструктор в примере выше приведён неверно. Надо либо определить новый конструктор с 1-м параметром, либо переопределить старый, установив значение некоторых параметров по умолчанию, например так:
Stock::Stock(const char * co, int n = 0, double pr = 0.0) strncpy(company,co,29); }
Вопросы для самоконтроля · Перечислите и объясните основные технологические характеристики ООП? · Как выполняется переход от абстрактного описания к реализации в ООП? · Как выглядит описание класса? · Объясните атрибуты доступа public и private! · В чем состоит принцип инкапсуляции данных? · Как выглядят декларации методов в реализации класса? · Назначение конструкторов и деструкторов? · Когда требуется явное определение деструктора? · Что означает ключевое слово inline? · Как декларировать inline-метод без применения ключевого слова inline?
Лекция 20. С++: ссылочные переменные, перегрузка операций и дружественные типы данных Не нашли, что искали? Воспользуйтесь поиском:
|