Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Приведите несколько случаев, когда конструктор вызывается неявно.






Копирование, конструирование внутренних объектов, передача по значению, приведение типа.

41. Как проинициализировать динамическую переменную?

в списке инициализаторов

new

placement new

new(nothrow)

placement - Особая форма оператора new, позволяет не выделять память, а получить своим аргументом адресс на уже выделенную память. Происходит размещение(инициализация) объекта путём вызова конструктора и объект создаётся в памяти по указанному адресу.

42. Как объявить константу в классе? Можно ли объявить дробную константу?

const int x; const double x;

43. Каким образом разрешается инициализировать константные поля в классе?

статические интегральные прямо на месте, остальные в инициализаторе или вне класса, или в конструкторе

44. В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?

В порядке объявления. Нет.

45. Какие конструкции С++ разрешается использовать в списке инициализации качестве инициализирующих выражений?

rvalue, инициализированные lvalue

46. Какой вид конструктора фактически является конструктором преобразования типов?

Конструктор не explicit

 

47. Для чего нужны функции преобразования? Как объявить такую функцию в классе?

Для корректного приведения неродственных типов между собой.

Как операторы преобразования.

static_cast – иерархическое преобразование с проверкой на этапе компиляции

reinterpret_cast – несвязанное преобразование с проверкой на этапе компиляции

dynamic_cast – проверяется на этапе выполнения RTTI.

const_cast – аннулирует const и volatile

operator int() const {return v; }

48. Как запретить неявное преобразование типа, выполняемое конструктором инициализации?

explicit

49. Какие проблемы могут возникнуть при определении функций преобразования?

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

50. Для чего служит ключевое слово explicit?

Это модификатор для запрещения неявного преобразования типов объектов аргументов конструктора.

51. Влияет ли наличие целочисленных констант-полей на размер класса?

Если не static, то да.

52. Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам массива начальные значения?

Да. В классе – только в конструкторе. Если статический константный, то вне пределов класса.

53. Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?

Один. Любой. Чаще лучше ссылку.

54. Для чего нужны статические поля в классе? Как они определяются?

Для хранения состояния класса. static int i;

55. Как объявить в классе и проинициализировать статический константный массив?

class A { static const int I[3]; } A:: I[3] = {1, 2};

56. Что такое выравнивание и от чего оно зависит? Влияет ли выравнивание на размер класса?

Расположение данных в памяти поблочно, так как процессор читает машинными словами. Зависит от реализации компилятора, ОЗУ и процессора. Влияет.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.