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

42. Вложенные классы.

43. Классы и указатели при наследовании.

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

Кострукторы вызываются в порядке происхождения классов, а деструкторы – в обратном порядке.

44. Многократная перегрузка операций.

45. Многоточие в качестве параметра функции. Для некоторых функций невозможно задать число и тип всех параметров, которые можно ожидать в вызове. Такую функцию описывают завершая список описаний параметров многоточием (...), что означает "и может быть, еще какие-то параметры". Например:

int printf(char* ...);

Это задает, что в вызове printf должен быть по меньшей мере один параметр, char*, а остальные могут быть, а могут и не быть. Например:

printf("Hello, world\n");

Чрезмерное использование многоточий, вроде wild(...), полностью выключает проверку типов параметров, оставляя программиста открытым перед множеством неприятностей, которые хорошо знакомы программистам на C.

46. Указатель типа «void».

В C++ существует специальный тип указателя, который называется указателем на неопределённый тип. Для определения такого указателя вместо имени типа используется ключевое слово void в сочетании с описателем, перед которым располагается символ *.

void *UndefPoint;

Для объекта типа указатель на объект неопределённого типа отсутствует информация о размерах и внутренней структуре адресуемого участка памяти. Из-за этого не могут быть определены какие-либо операции для преобразования значений.

Поэтому переменной UndefPoint невозможно присвоить никаких значений без явного преобразования этих значений к определённому типу указателя.

Объектам типа указатель на объект неопределённого типа в качестве значений разрешается присваивать значения лишь в сочетании с операцией явного преобразования типа.

В этом случае указатель на объект неопределённого типа становится обычным указателем на объект какого-либо конкретного типа. Со всеми вытекающими отсюда последствиями.

Но и тогда надо постоянно напоминать транслятору о том типе данных, который в данный момент представляется указателем на объект неопределённого типа:

int mmm = 10;

pUndefPointer = (int *)&mmm;

pUndefPointer выступает в роли указателя на объект типа int.

(*(int *)pUndefPointer)++;

47. Адрес в качестве возвращаемого значения функции.

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

Чтобы вернуть указатель, функция должна объявить его тип в качестве типа возвращаемого значения. Например, если функция f() должна вернуть указатель на целое числа(т.е. адрес целого числа), то она должна быть объявлена так:

int *f()

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

48. Операция «typeid».

«typeid» - средство динамической идентификации типов. Оператор «typeid» используется для получения типа объекта во время выполнения программы. Чтобы воспользоваться оператором «typeid», необходимо включить в программу заголовок <typeinfo>.

Самый распространенный формат таков:

typeid(object) здесь object – объект, тип которого нужно получить.

Можно запрашивать не только встроенный тип, но и тип класса, созданного программистом.

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