Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
assistance.doc
Скачиваний:
1
Добавлен:
25.09.2019
Размер:
90.62 Кб
Скачать

16 Вопрос.

Множественное наследование. Определение класса при множественном наследовании.

Множественное наследование дает возможность создать производный класс на основе нескольких базовых. Производный класс может служить базовым классом. Такой набор связанных классов называется иерархией классов.

В случае множественного наследования после двоеточия перечисляются через запятую все базовые классы со своими модификаторами доступа.

Синтаксис: class<имя класса>:<спецификатор><имя базового класса 1>,..,<спецификатор> <имя базового класса N>{<список элементов производного класса>};

Замечания:

1). При создании объекта производного класса сначала вызывается конструктор базового класса, а затем конструктор производного класса;

2). При разрушении объекта производного класса сначала вызывается его деструктор, а за ним деструктор базового класса;

3). Если некоторый класс наследует несколько базовых классов, то вызов конструкторов происходит слева направо, а деструкторов справа налево;

4). При множественном наследовании никакой класс не может больше 1-го раза использоваться в качестве непосредственного базового; чтобы устранить дублирование объекта непрямого базового класса при множественном наследовании этот базовый класс объявляют виртуальным;

5). Неоднозначность трактовки, необходимо не забывать указывать класс к которому принадлежит этот метод.

17 Вопрос.

Динамическое распределение памяти под объекты. Операторы new и delete.

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

Доступ к динамическим объектам осуществляется не по именам, а по указателям.

Динамическая память – это оперативная память компьютера, предоставляемая программе в процессе ее выполнения.

Создание динамического объекта происходит в два этапа:

1). Резервирование места в ДП под объект и формирование значений указателей ссылающихся под этот объект;

2). Запись значений объекта в ДП по указанному адресу.

Для выделения места служит оператор new: <имя указателя>= new <тип данных>;

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

Для освобождения ДП служит оператор delete: delete[]<имя указателя>;

При перемещении объекта в ДП с помощью оператора new вызывается конструктор, а при освобождении деструктор.

18 Вопрос.

Статические элементы класса. Описание и инициализация статических переменных. Способы доступа к статическим переменным. Статические функции.

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

Компилятор каждому имени в соответствии ставит адрес, в связи с этим доступ к статическим объектам реализуется по имени.

Как поля, так и методы могут быть статическими. Они могут использоваться всеми объектами, но хранятся в единичном экземпляре. К статическим переменным можно обращаться до создания объекта. Чтобы разместить статические поля памяти стоит объявить их глобально.

Например, static int a;

Обращение к статическому полю можно двумя способами:

1). <имя класса>::<имя элемента>;

2). <имя объекта>::<имя элемента>.

Если при описании класса статической переменной присвоить статус private, то компилятор выдаст сообщение о невозможности доступа к элементу. Обращаться в таком случае можно через статические методы.

Статическая функция обрабатывает только статические поля.

Синтаксис: <имя класса>::<обращение к статической функции>; <имя объекта>::<обращение к статической функции>.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]