- •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. Как организуется передача исключения в объемлющий блок?
90. Как инициализировать, изменить поля класса, определенные как константные?
Константные методы отличаются тем, что не изменяют значений полей своего класса.
Пример:
class aClass
{
private:
int alpha;
public:
void nonFunc() //неконстантный метод
{ alpha = 99; } //корректно
void conFunc()const //константный метод
{ alpha = 99; } //ошибка: нельзя изменить значение поля
};
Для того, чтобы сделать функцию константной, необходимо указать ключевое слово const после прототипа функции, но до начала тела функции. Если объявление и определение функции разделены, то модификатор const необходимо указывать дважды – как при объявлении функции, так и при ее определении.
Пусть класс
class A
{ public:
const int b;
A(int val): b(val){};
}
Константа инициализируется в конструкторе в странном месте после описание конструктора и перед его реализацией.
Вот код для изменения константы, НО ГЛОБАЛЬНЫЕ константы таким образом НЕ ТРОГАТЬ
#include <iostream>
using namespace std;
class A{
const int val;
public:
A(): val(1){};
void check()
{
if (val == 1)
cout << "Old value" << endl;
else
cout << "New value" << endl;
}
void change()
{
int& z=const_cast<int&>(val);
z=2;
}
};
int main()
{
A a;
a.check();
a.change();
a.check();
}
91. Опишите синтаксис определения метода класса вне описания класса.
class <название класса> { … <тип результата1> <имя функции1> (<типы параметров1 (через запятую)>); … friend <тип результата2> <имя функции2> (<типы параметров2 (через запятую)>); … } … <тип результата1> <название класса>::<имя функции1> (<типы параметров1 (через запятую)>) { <тело функции1> } … <тип результата2> <имя функции2> (<типы параметров2 (через запятую)>) { <тело функции2> }
пример:
class A
{ public:
int calc(int,int); }
int A:: calc(int a, int b)
{ return a + b; }
Символ :: - это символ является знаком операции глобального доступа.
92. Опишите синтаксис конструктора.
Конструктор – это метод класса, выполняющийся автоматически в момент создания объекта. Используется для выделения дин.области памяти либо задания начального значения полей класса.
class <название класса> { … <название класса> ()[:<…>]{<.>}; // конструктор по умолчанию <название класса> (<параметры (через запятую) + параметры по умолчанию>)[:<…>]{<.>} //синтаксис конструктора с параметрами <название класса> (const <название класса> &<название переменной>)[:<…>]{<.>} //конструктор копирования ~<название класса> (){<.>} //деструктор … }
Об особенностях… В синтаксисе выше используется краткое обозначение [:<…>]{<…>}, которое можно рассматривать как:
<.> - тело конструктора / деструктора.
[:<…>] – эта часть может отсутствовать, если она есть, то её синтаксис : <имя переменной 1> (<значение переменной 1>), <имя переменной 2> (<значение переменной 2>), <…>
В данной части происходит инициализация переменных.
class A
{ public:
A(список параметров);
}
A:: A(список параметров) { }
Особенности: конструктор ничего не возвращает,т.е. не указывается тип, который возвращает, хотя на самом деле он возвращает объект класса и имеет название, совпадающее с именем класса.
93. Укажите способы доступа к полям и методам класса.
. - позволяет ссылке на объект получить доступ к полю структуры (класса).
Пример: struct strct{ int info; }; void main(){ strct x; x.info=7; }
-> - позволяет ссылке на объект получить доступ к полю структуры (класса). struct strct{ int info; }; void main(){ strct *x=new strct; x->info=7; }
94. Зачем нужны методы с модификатором const? и как они используются.
Когда метод не изменяет поля объекта, для которого он вызван, желательно в конце написать const
void func () const { …}
пример из перегрузки операторов:
inline Chislo Chislo::operator + (const Chislo & c) const
{
Chislo m;
m.mi = mi + c.mi;
m.ma = ma + c.ma;
return m;}
95. Как определить константный объект? Какие методы доступа применимы к нему?
Если объект класса объявлен с модификатором const, он становится недоступным для изменения. Это означает, что для такого объекта можно вызвать только константные методы, поскольку только они гарантируют, что объект не будет изменен.
int main()
{ const MyClass obj;
… }
96. Какой параметр скрыто передается методу класса? Опишите использование ключевого слова this.
Функции-члены класса (за исключением статических) получают в дополнение к списку параметров еще и неявный указатель this - адрес "своего" объекта, того, с которым они вызваны и поля которого они должны обрабатывать.
Ключевое слово "this" представляет собой указатель на текущий объект класса. Методы класса могут использовать ключевое слово this чтобы получить указатель на объект для которого вызван данный метод. Указатель this представляет собой постоянную величину, мы не можем изменять его значение в своей программе.
class my
{ int a;
…
public:
my(могут быть параметры); //конструктор- без типа, совпадает с именем класса
void b() { this->a=0; }
…
};
