Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа.html

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 27.11.2024

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

class Example{  //вспомогательный класс

Example(int i, float f){…}// конструктор

}

class Test{

 char* ptr;

 Example field; //определяем поле-объект класса Example

}

Чтобы создать объект класса Test, нужно выполнить его конструктор, в котором нужно инициализировать поле-объект field. А для этого нужно вызывать конструктор класса Example.

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

Конструктор класса Test может быть определен следующим образом:

 Test(int w, char *pt, float t): field(w,t) {

  ptr=pt;

       ...}

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

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

Очевидно, что при разрушении объекта класса Test, помимо деструктора этого класса также потребуется вызов и деструктора класса Example.

 Замечание

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

ЗАДАНИЕ 3 (порядок вызова конструкторов и деструкторов)

Чтобы определить порядок вызова конструкторов и деструкторов, эти функции-члены классов выводят на экран сообщения о своем вызове.

  1.  Описать два класса Inner1 и Inner2, имеющих по одному полю типа int и по два конструктора: один без параметров, а другой — с параметром для инициализации поля данных.
  2.  В каждом конструкторе предусмотреть вывод на экран соответствующего ему сообщения типа: "Конструктор с параметром класса Inner1"
  3.  Описать класс (class) Test, в котором имеется одно поле данных a1 типа Inner1. Создать два конструктора для класса Test (без параметров и с одним параметром int), которые выдают на экран сообщения об их вызове. Параметр конструктора использовать для инициализации поля a1.
  4.  В описание каждого класса (Test, Inner1, Inner2) добавить деструктор, в котором выводится сообщения, что вызван деструктор для объекта данного класса.
  5.   В функции main описать объект типа Test, инициализируемый произвольным целым значением. Изучить порядок вызова конструкторов и деструкторов, применяя по очереди два способа инициализации поля a1: традиционный (в теле конструктора) и новый (вне тела).
  6.   Изменить описание класса Test, добавив второе поле данных a2 типа Inner2. Изменить конструктор с параметром: его аргумент использовать для инициализации одинаковым значением полей a1 и a2.
  7.  В новой функции main описать неинициализированную переменную X типа Test и запустить программу. Какие конструкторы вызваны, в каком порядке? В каком порядке вызваны деструкторы?
  8.  В новой функции main описать переменную y типа Test, которая инициализируется некоторым значением (например, 1). Запустить программу. Какие конструкторы вызваны, в каком порядке? В каком порядке вызваны деструкторы?
  9.  Внести изменения в описание класса Test: поменять местами порядок описания полей a1 и a2. При условиях пункта 4 запустить программу и выяснить, как изменился порядок вызова конструкторов и деструкторов. Вернуть порядок старый описаний и поменять порядок инициализации полей a1 и a2 в конструкторе. Влияет ли этот порядок на вызов конструкторов и деструкторов?
  10.  Учитывая результаты пп. 3 – 5, сформулировать правила вызовов конструкторов и деструкторов для классов, с "вложенными" в них объектами других классов.

Вопросы для контроля

1. В чем различие разделов private и public в описании класса?

2. В чем проблема использования константных полей и как она решается?

3. Когда при наличии перегружаемых функций может возникнуть конфликт?

4. Могут ли все аргументы функции иметь значения по умолчанию?

5. Какие особенности синтаксиса имеют конструкторы и деструкторы?

6. Как инициализируются поля-объекты?

7. Если в программе определены несколько объектов класса, причем часть на глобальном уровне, а часть — внутри функции, то, в каком порядке будут вызываться конструкторы и деструкторы?




1. Контрольная работа- Театрализация как разновидность художественно-речевой деятельности в детском саду
2. Разработка приложения FileInfo по средствам среды программирования Microsoft Visual C
3. тема управления временем Назовите предмет социального таймменеджмента- А Оптимизация процесса и резуль
4. Характеристика функционирования единого налога на вмененный доход
5. обчислювальних машин Зареєстровано в Міністерстві юстиції України 17 червня 1999 р.
6. тематический анализ семинар Юденкова Екатерина Юрьевна 2281-Р1 Подгруппа 2 Информатика и база данн
7. конспект лекцій Дніпропетровськ 2009 Міністерство фін
8. Сократ. Искусство дружбы
9. Об обороне Настоящий Федеральный закон определяет основы и организацию обороны Российской Федерации по
10. тема стандартов по информациибиблиотечному и издательскому делу
11. Тема Строение и функции эндокринной системы Задание 1
12. Влияние мирового финансового кризиса на развитие пенсионной системы в Республике Казахстан
13. Odessa
14. 05040062 ~ Социальноэкономическое образование профиль Юриспруденция Год обучения группа- 44 Сем
15. бакалавр галузь знань 0305 Економіка та підприємництво нап
16. Лабораторная работа 2 Цель- Выполнить перевод десятичных дробей из десятичной системы счисления в двои
17. ВІВАТ АКАДЕМІЯ Я І СЕЛА БРУК Декада бліцпоказів студентів та випускників ХДАК за т
18. История России
19. .65 Юриспруденция Нижний Новгород 2012
20. Лекция третья 27 11 2013 Творчество Рабиндраната Тагора 18611941 и его влияние на всю индийскую литературу