Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Приведите несколько случаев, когда конструктор вызывается неявно.
Копирование, конструирование внутренних объектов, передача по значению, приведение типа. 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. Что такое выравнивание и от чего оно зависит? Влияет ли выравнивание на размер класса? Расположение данных в памяти поблочно, так как процессор читает машинными словами. Зависит от реализации компилятора, ОЗУ и процессора. Влияет.
|