Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 126; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.17.20 (0.005 с.) |