- •1. Приведите определение одного и того же числа в 10-ной и 16-ной системах счисления.
- •4. Приведите примеры определения строковых литералов. Как разместить длинную строковую константу в нескольких строках? Что такое «пустая строка»? Ее внутреннее представление.
- •6. Как явно указать, что константа должна иметь некоторый требуемый тип?
- •7. Как определяется переменная булевского типа? Ее значения и внутреннее представление.
- •33. Определите назначение операций ? , (тип)
- •73. Укажите способы доступа к полям структуры. Можно ли присвоить одну структуру другой?
- •74. Можно ли структуру возвратить из функции?
- •75. Как определить битовые поля?
- •76. Приведите синтаксис объявления и определения функции. Укажите область действия параметров функций.
- •77. Какие типы возвращаемых значений недопустимы для функций?
- •78. Как вернуть массив из функции? Укажите особенности передачи массивов как параметров.
- •79. Укажите особенности передачи параметров функций по значению, по адресу, по ссылке.
- •80. Можно ли объявить параметры функции с модификаторами?
- •81. Опишите особенности задания параметров функций со значениями по умолчанию.
- •82. Как передать функции переменное число параметров?
- •83. Зачем перегружают функции? Как компилятор определяет какую из перегруженных функций вызывают?
- •84. Как определяется шаблон функции? Опишите процесс конкретизации шаблона. Что есть явная специализация шаблона?
- •90. Как инициализировать, изменить поля класса, определенные как константные?
- •91. Опишите синтаксис определения метода класса вне описания класса.
- •92. Опишите синтаксис конструктора.
- •97. Можно ли построить класс без конструктора? Как в этом случае описать объекты класса?
- •99. Определите понятие «дружественная функция ».
- •100. Опишите синтаксис деструктора.Зачем виртуализировать деструктор? Можно ли наследовать деструктор?Можно ли явно вызвать деструктор?
- •101. Все ли операции могут быть перегружены? Можно ли перегрузить операции для базовых стандартных типов данных?
- •102. Зачем используют ключевое слово operator?
- •103. Укажите различные способы перегрузки операторов.
- •114. Определите понятие «абстрактный класс». Определите понятие «чистый виртуальный метод».
- •115. Опишите понятие «множественное наследование». Какие проблемы возникают при множествен-ном наследовании?
- •116. Опишите использование ключевых слов try, throw,catch.
- •117. Как определяется, какому блоку catch передается исключение для обработки?(стр.665)
- •118. Куда передается управление после обработки исключения?
- •119. Как организуется передача исключения в объемлющий блок?
97. Можно ли построить класс без конструктора? Как в этом случае описать объекты класса?
Если в классе не определить конструктор (хотя бы один), тогда компилятор создаст конструктор по умолчанию. Можно будет дать возможность пользователю изменять переменные самостоятельно, или же определить функции, которые будут изменять значения переменных.
Определить конструктор в закрытой части можно. В этом случае доступ к конструктору может получить только дружественный класс, который должен быть объявлен как дружественный в объявлении данного класса.
98. Когда вызывается конструктор? Наследуется ли конструктор? Укажите синтаксис списка инициализаций при вызове конструктора. Можно ли определить конструктор в закрытой секции? Можно ли явно вызвать конструктор?
Конструктор вызывается в момент создания объекта. Конструктор не наследуется.
class my
{ const int a,b,c;
public:
my(могут быть параметры): a(5),b(3),c(4){};
…
};
Определить конструктор в закрытой части можно. Оно компилится. Вот тока ни один объект создать не получится.
Нет, вызвать явно конструктор нельзя.
99. Определите понятие «дружественная функция ».
Это функция, которая не является методом класса, но имеет доступ к его закрытой части. Дружественная функция может обращаться ко всем его элементам, включая private и protect. Одна и та же функция может быть дружественной для двух или более классов.
class point
{public:
friend void point::Clear(point*); // Функция Clear объявляется дружественной классу point
private:
int m_x;
int m_y; };
void Clear(point* ptrPoint) // Функция Clear
{ ptrPoint->m_x = 0; // Обращаемся к элементам класса, объявленным как private
ptrPoint->m_y = 0;
return;}
void main()// Главная функция
{ point pointTestPoint;
Clear(&pointTestPoint); // Вызываем дружественную функцию
}
100. Опишите синтаксис деструктора.Зачем виртуализировать деструктор? Можно ли наследовать деструктор?Можно ли явно вызвать деструктор?
class A
{
public:
~A();
}
A:: ~A() { …}
Деструктор тоже ничего не возвращает и имеет название, совпадающее с именем класса, но перед ним стоит ~. Деструктор всегда ничего не принимает. Когда имеется иерархия классов, невозможно точно определить, куда указывает указатель. И тогда операция delete не будет работать. Объявив деструктор виртуальным, мы гарантируем, что для каждого производного класса будет замещен деструктор и объект правильно удалится.
Пример:
class Base
{ public:
~Base() //невиртуальный деструктор
//virtual ~Base()// виртуальный дестркутор - закоментен
{ cout << “Base удален\n”; }
};
class Derv : public Base
{ public:
~Derv()
{ cout << “Derv удален\n”; }
};
int main()
{ Base* pBase = new Derv;
delete pBase;
return 0;
}
Результат программы : Base удален //результат ошибочен, к такому результату привело то, что деструктор базового класса в приведенном листинге не виртуальный. Исправить это можно, заккоментировав первую строчку определения дестркуктора и активизировать другую.
Результатом будет: Derv удален
Base удален
Наследовать деструктор нельзя. Явно вызвать деструктор вызвать …
