Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Массивы объектов статических и динамическихСодержание книги
Поиск на нашем сайте Массив объектов может инициализироваться либо автоматически конструктором по умолчанию, либо явным присваиванием значений каждому элементу массива. Определение статического объекта и массива статических экземпляров класса с явным присваиванием значений: <имя класса> <имя объекта> (параметры конструктора); <имя класса> <имя массива> [размер массива] = { <имя класса>(параметры конструктора для 0-го экземпляра), …, <имя класса> (параметры конструктора для последнего экземпляра) }; Определение динамического объекта и массива динамических экземпляров класса с явным присваиванием значений: <имя класса> * <имя указателя на объект> = new <имя класса> (параметры конструктора); <имя класса> * <имя массива указателей на объекты> [разм. массива] = { new <имя класса> (параметры конструктора для 0-го экземпляра), …, new<имя класса>(параметры конструктора для последнего экземпляра) }; Пример. class demo{ int x; public: demo(){x=0;} demo(int i){x=i;}}; int main(){ class demo a[20]; //вызов конструктора без параметров(по умолчанию) class demo b[2]={demo(10),demo(100)};//явное присваивание return 0;}
Деструктор Деструктор - это функция, которая автоматически выполняется, когда экземпляр класса уничтожается. Деструктор не уничтожает объект, а вызывается либо при выходе объекта за пределы своей области видимости, либо при уничтожении динамического объекта операцией delete и выполняет запрограммированные в его теле действия. Назначение – выполнение всех действий, сопровождающих удаление объекта. Наиболее важное - это освобождение всех ресурсов, включенных в объект при его создании или выполнении действий над объектом. Такими ресурсами могут быть участки памяти динамически выделенными для полей объекта, файлы, открытые при создании объекта и связанные с ним, установка видеосистемы в исходное состояние, написание каких-либо фраз. Класс может иметь несколько конструкторов, но деструктор может быть только один.
Формат деструктора: ~имя_класса(){операторы_тела_деструктора}
Имя деструктора совпадает с именем его класса, но предваряется символом “~” (тильда). Деструктор не имеет параметров и возвращаемого значения. Вызов деструктора выполняется не явно (автоматически), как только объект класса уничтожается. Например, при выходе за область определения или при вызове оператора delete для указателя на объект. string *p=new string(“строка”); delete p; Если в классе деструктор не определен явно, то компилятор генерирует деструктор по умолчанию, который просто освобождает память, занятую данными объекта. В тех случаях, когда требуется выполнить освобождение и других объектов памяти, например область, на которую указывает ch в объекте string, необходимо определить деструктор явно: ~string(){delete []ch;} Так же, как и для конструктора, не может быть определен указатель на деструктор. Деструктор может быть вызван явно для некоторого объекта, при этом объект не уничтожается, а выполняются операторы тела деструктора.
Указатели на компоненты-функции Можно определить указатель на компонентные функции. Вне класса можно следующим образом определить указатель на метод класса: тип_возвр_значения(имя_класса::*имя_указателя_на_функцию) (спецификация_параметров_функции);
Пример. double(complex::*ptcom)(); // Определение указателя ptcom = &complex:: real; // Настройка указателя на метод real complex A(5.2,2.7);
Теперь для объекта А можно вызвать его функцию real через указатель cout<<(A.*ptcom)(); Можно определить также тип указателя на функцию typedef double(complex::*PF)(); а затем определить и сам указатель с инициализацией PF ptcom=&complex::real; Контрольные вопросы 1. Объектно-ориентированный подход к программированию. 2. Понятие класса как структурированного типа. Определение класса 3. Внешнее и внутреннее определение компонентных функций. inline- функции. 4. Статусы доступа к членам класса. Спецификаторы доступа. 5. Создание объектов (экземпляров класса) статических и динамических. Инициализация. Обращение к компонентным данным и функциям. 6. Компонентные данные и компонентные функции. 7. Конструкторы и деструкторы. Назначение, формат определения, свойства. 8. Конструктор с параметрами. Список инициализации. Создание объектов (экземпляров класса) и массивов объектов статических и динамических. 9. Конструктор с аргументами, задаваемыми по умолчанию. 10. Конструктор по умолчанию. 11. Конструктор копирования. Назначение. Копирование по умолчанию. 12. Указатели на компонентные функции.
|
||
|
Последнее изменение этой страницы: 2021-02-07; просмотров: 209; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.214 (0.009 с.) |