Вопросы для самоконтроля по курсу «Технология программирования»
Вопросы для самоконтроля по курсу «Технология программирования»
- Как должна быть объявлена локальная переменная функции, чтобы она сохраняла свое значение между вызовами функции?
- Как получить доступ к глобальной переменной с тем же именем, что и переменная в текущей области действия?
- Какие способы передачи параметров в функции существуют в C++?
- Какими значениями инициализируются локальные переменные?
- Будет ли компилироваться программа, в которой объявлены две функции: void foo(int x) и int foo()? Ответ объяснить.
- Чему равны элементы массива a[2] и a[3], объявленного следующим образом:
int a[4] = {1, 2, 3 }; ? - Имеется объявление int a[4], *p = a, *q = &a[1]; Чему равен результат выражения (q == ++p) ?
- Имеется объявление int a[4] = {1, 2, 3, 4}, *p = &a[1]. Чему равно значение p[1]?
- Какими значениями инициализируются поля экземпляра класса?
- Какой вид конструктора должен быть определен в классе A для возможности объявления переменной – массива экземпляров класса: A a[10]; ?
- Сколькими способами можно перегрузить конструктор и деструктор?
- Сколько раз вызывается деструктор класса A в данной программе:
A foo(A a) {
A r = a;
return r;
}
void main() {
A a1, a2;
a2 = foo(a1);
}
- Сколько раз вызывается деструктор класса A в данной программе:
A foo(A a) {
return A(a);
}
void main() {
A a1, a2;
a2 = foo(a1);
}
- Противоречит ли наличие дружественных классу функций принципу инкапсуляции? Ответ объяснить.
- Какие ошибки (если есть) присутствуют в следующем объявлении класса:
class A {
int f = 0;
A(int _f) : f(_f) {}
void ~A() { f = 0;}
};
- Какие ошибки (если есть) присутствуют в следующем объявлении класса:
class A {
int f = 0;
A(int _f) : f(_f) {}
A(A src) { f = src.f;
};
- Можно ли (если да, то как) перегрузить оператор присваивания при помощи: 1) объявления метода; 2) объявления (дружественной) функции ?
- Можно ли (если да, то как) перегрузить оператор сложения при помощи: 1) объявления метода; 2) объявления (дружественной) функции ?
- Как перегрузить операцию преобразования типа B в тип A для класса А?
- Приведите пример композиции и наследования для пары классов A и B.
- В какой последовательности вызываются операторы из списка инициализации полей?
- Какие функции не наследуются автоматически?
- Имеется объявление:
class A {
public:
int fa;
};
class B : A {
int fb1;
protected:
int fb2;
public:
int fb3;
};
B b;
К каким полям имеется доступ через объект b?
- Наследуются ли статические функции-члены класса? Могут ли они быть виртуальными?
- В чем состоит отличие в вызове виртуальной и невиртуальной функции при обращении к заданному объекту по имени и операции доступа к элементу точка?
- В чем состоит отличие в вызове виртуальной и невиртуальной функции при обращении к заданному объекту с помощью указателя базового класса (или ссылки)?
- Определите шаблонный класс, обеспечивающий работу с многомерными массивами.
- Определите оператор индексирования [] для шаблонного класса, обеспечивающего работу с многомерными массивами.
- Имеется объявление из п.23. Какая строка будет выведена при выполнении следующего блока кода:
try {
throw B;
}
catch(A a) {
std::cout << “A object caught” << std::endl;
}
catch(B b) {
std::cout << “B object caught” << std::endl;
}
- Дайте определение класса, позволяющего создание объекта в единственном для программы экземпляре.
|