Какой результат должны возвращать операции с присваиванием?

Что определяет класс? Чем отличается класс от объекта?

Класс определяет пользовательский тип: описание данных и операций над ними. Объект – это конкретный экземпляр класса со своим состоянием.

Можно ли объявлять массив объектов? А массив классов?

Да. Нет. Только в метапрограммировании. boost::tuple

Разрешается ли объявлять указатель на объект? А указатель на класс?

Да. Нет.

Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?

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

Как называется использование объекта одного класса в качестве поля другого класса?

Композиция.

Является ли структура классом? Чем класс отличается от структуры?

Да. По умолчанию в классе все поля private

7. Какие ключевые слова в С++ обозначают класс?

class, struct

Объясните принцип инкапсуляции.

Сокрытие деталей реализации.

Что такое композиция?

Использование объекта одного класса в качестве поля другого.

Для чего используются ключевые слова public и private?

Для определения области видимости.

Можно ли использовать ключевые слова public и private в структуре?

Да.

Существуют ли ограничения на использование public и private в классе? А в структуре?

Нет. Нет.

Обязательно ли делать поля класса приватными?

Нет.

Что такое метод? Как вызывается метод?

Метод – это функция, определенная в классе.

Если статический, то вызывается для класса, если обычный – то для объекта класса.

Может ли метод быть приватный?

Да.

Как определить метод непосредственно внутри класса? А вне класса? Чем эти определения отличаются?

class A

{

void method x{}

};

Можно в методах присваивать параметрам значения по умолчанию?

Да. Существуют дополнительные ограничения.

Что обозначается ключевым словом this?

Указатель на объект, который вызвал метод.

Зачем нужны константные методы? Чем отличается определение константного метода от обычного?

Чтобы предотвратить случайное изменение данных внутри метода и показать, что метод не меняет состояние класса.

Может ли константный метод вызываться для объектов-переменных? А обычный метод — для объектов-констант?

Да. Нет.

Объясните принцип полиморфизма.

Возможность работать с объектами разных классов одинаковым образом.

Поддержка различного поведения родственных классов, предоставляемого через единый интерфейс базового класса.

Есть статический – на этапе компиляции. Шаблоны, перегрузка функций и операторов.

Есть динамический – виртуальные функции. Точное значение операции определяется объектом для которого она вызывается.

Сколько места в памяти занимает объект класса? Как это узнать?

Столько, сколько все его поля, кроме статических, плюс размер указателя на таблицу виртуальных функций, если объект содержит виртуальные функции. Если же объект не содержит данных и виртуальных функций, то его размер равен “1 char на gcc 32 bit“.

Каков размер «пустого» объекта?

Если объект не содержит данных и виртуальных функций, то его размер равен “1 char на gcc 32 bit“.

Влияют ли методы на размер объекта?

Нет.

Одинаков ли размер класса и аналогичной структуры?

Да.

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

sizeof, ., .*, typeid ?:

потому что их операнд – это имя типа.

Можно ли перегружать операции для встроенных типов данных?

Нет, потому что тип – это набор данных и операций над ними. Изменяя семантику типа, мы меняем само определение типа.

Можно ли при перегрузке изменить приоритет операции?

Нет.

Можно ли определить новую операцию?

Нет. Надо пользоваться функциями.

Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?

На один параметр меньше, чем внешняя перегрузка.

Какой результат должны возвращать операции с присваиванием?

Ссылку.
32. Какие операции не рекомендуется перегружать как методы класса? Почему?
Нужно перегружать только те, которые меняют private члены(типа +=, -= и т.д.). А вот уже +, — и т.д. — могут воспользоваться уже перегруженными +=, -=. Не рекомендуется перегружать ||, , так как по умолчанию они оптимальны — т.е. если установлена истинность одного аргумента, второй даже не обрабатывается.

33. Какие операции разрешается перегружать только как методы класса?
operator=, operator-, operator(), operator[], приведение типа.
operator- обязан иметь в качестве возвращаемого значения struct, class, union или ссылку на это

34. Дайте определение дружественной функции. Как объявляется дружественная функция? А как определяется?
Дружественная для данного класса функция — которой предоставлен доступ к private и protected членам. Функция объявляется внутри класса, к которому надо предоставить доступ, определяется там, где нужно(уже без модификатора friend).

35. Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.
Конструктор — функция, которая вызывается при просто объявлении(конструктор по умолчанию) или инициализации объекта. Назначение — получать объект класса с какими-то начальными параметрами. Конструктор для данного можно вызвать только один раз.

36. Сколько конструкторов может быть в классе? Допускается ли перегрузка конструкторов? Какие виды конструкторов создаются по умолчанию?
Сколько угодно. Допускается. По умолчанию создается пустой конструктор и конструктор копирования.

37. Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?
Может. Последствия — объект не может быть сконструирован этим конструктором извне.

38. Приведите несколько случаев, когда конструктор вызывается неявно.
bigint a;(вызван пустой конструктор)

bigint a = 123214;(вызван конструктор от string)

bigint a = 10;(вызван конструтор от long long)

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

40. Каким образом разрешается инициализировать константные поля в классе?
Инициализировать ее можно только через список инициализации. Можно еще static const, ее нужно инициализировать сразу при объявлении

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

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

class A{ int* a; int* b; A(): b(new int()), a(b) { }};

При выполнении конструктора-деструктора вызовы виртуальных функции не
виртуальны.

2017 — 500 лет после Лютера [весь трактат одним файлом]


Похожие статьи.

Понравилась статья? Поделиться с друзьями: