игра брюс 2048
Главная / Программирование / Язык программирования C++ / Тест 12

Язык программирования C++ - тест 12

Упражнение 1:
Номер 1
Какие бывают конструкторы?

Ответ:

 (1) по умолчанию 

 (2) с параметрами 

 (3) инициализирующий 

 (4) копирующий 


Номер 2
Имеется три объекта класса А:
	 A a1,a2,a3 в каком выражении возможен неявный вызов конструктора копирования
	

Ответ:

 (1) a3=a1+a2; 

 (2) a2.sum(a3); 

 (3) a2.sum(&a3); 


Номер 3
Вызовет ли данный код ошибку компиляции?
 
class Rectangle
{
   public:
      int a,b;
      
      int sum();
      int square();
      ~rect(); 
};
 

Ответ:

 (1) нет, все записано верно 

 (2) да, имя деструктора не может начинаться с маленькой буквы 

 (3) да, имя деструктора должно совпадать с именем класса 


Упражнение 2:
Номер 1
Каким может быть аргумент деструктора?

Ответ:

 (1) адрес объекта 

 (2) указатель this 

 (3) аргумента не может быть 

 (4) уничтожаемый объект 


Номер 2
Будет ли вызываться конструктор, если в программе встретится следующaя конструкция:
	
monstr Super(200, 300), Vasia(50), Z;
monstr X = monstr(1000);
monstr Y = 500;
	
	

Ответ:

 (1) нет, не будет 

 (2) да, будет 

 (3) данная конструкция содержит синтаксическую ошибку 

 (4) данный код вызовет ошибку компиляции 


Упражнение 3:
Номер 2
Если имеется класс с двумя атрибутами
 class Complex {
      double real;
      double img;
 . . .
 };
 какой у него должен быть деструктор?

Ответ:

 (1) виртуальный деструктор 

 (2) деструктор, вызывающий деструкторы атрибутов 

 (3) деструктор не обязателен 


Номер 3
Отметьте все правильные варианты продолжения предложения: виртуальный деструктор

Ответ:

 (1) может использоваться с абстрактными классами 

 (2) не нужен, если класс не имеет производных классов 

 (3) должен быть определен как чисто виртуальный в абстрактном классе 


Упражнение 4:
Номер 1
Если в классе операция new переопределена как
 void* operator new(size_t size, int a);
 то какой вызов этой операции правильный?

Ответ:

 (1) Foo* ptr = new (20) Foo; 

 (2) Foo* ptr = new Foo(20); 

 (3) Foo* ptr = new [20] Foo; 


Номер 2
Если в классе операция delete переопределена как
 void operator delete(int x, void* addr)
 то при вызове
 A* ptr; . . . delete(10, ptr);

Ответ:

 (1) ошибка компиляции 

 (2) освободится массив из 10 элементов типа a 

 (3) аргумент 10 будет передан в оператор delete 


Номер 3
Если в классе определяется операция delete, то

Ответ:

 (1) только одна операция delete может быть определена для класса 

 (2) стандартная операция delete всегда доступна для этого класса 

 (3) все виды операций delete должны быть определены 


Упражнение 5:
Номер 1
Конструктор класса - это метод, который вызывается при создании объекта для ...(перечислить )

Ответ:

 (1) выделения памяти под динамические атрибуты класса 

 (2) выделения памяти под статические атрибуты класса 

 (3) инициализации атрибутов объекта 

 (4) загрузки методов класса в память 


Номер 2
Какой класс может использоваться в качестве типа атрибута класса?

Ответ:

 (1) базовый класс данного класса 

 (2) производный от данного класса 

 (3) пользовательский класс 

 (4) произвольный класс 


Номер 3
Какая из перечисленных функций не может быть конструктором?

Ответ:

 (1) String(); 

 (2) void String() 

 (3) String(String &s) 

 (4) const String(int a) 


Упражнение 6:
Номер 1
В каких строках ошибка?
 new long[];
new long[][2][4];
new long[3][][4];

Ответ:

 (1) во всех строках ошибка – неизвестен размер 

 (2) в строках нет ошибки 

 (3) в первой строке ошибка – неизвестен размер 

 (4) в последней строке ошибка – неправильный синтаксис 

 (5) во всех строках ошибка – неправильный синтаксис 


Номер 2
Отметьте правильный вариант освобождения всей памяти, выделенной для трехмерного массива для следующей программы
 long (*lp)[2][4];
lp = new long[3][2][4];

Ответ:

 (1) delete [] lp; 

 (2) delete lp; 

 (3) delete [][] lp; 

 (4) delete [][][] lp; 


Номер 3
Сопоставьте:
 1. Конструктор –
 2. Деструктор –
 3. Дружественная функция –
 4. Переопределение операций -
 A - вызывается автоматически, как только объект класса уничтожается.
 B – имеет доступ к защищенным и собственным компонентам класса, не являясь его компонентом.
 C – возможность распространения действия стандартных операций на операнды, для которых эти операции первоначально в языке не предполагались.
 D – используется для инициализации объектов класса. 

Ответ:

 (1) 1-D, 2-A, 3-B, 4-C 

 (2) 1-B, 2-A, 3-D, 4-C 

 (3) 1-C, 2-B, 3-A, 4-D 


Упражнение 7:
Номер 1
При использовании копирующего конструктора:

Ответ:

 (1) вновь созданный объект имеет те же атрибуты что и исходный 

 (2) вновь созданный объект зависит от копируемого 

 (3) вновь созданный объект не зависит от копируемого 


Номер 2
Известно, что в классе A определен один публичный конструктор A(int);. Выберите из предложенных выражений компилируемые:

Ответ:

 (1) A *a(4); 

 (2) A a; 

 (3) A *a = new A(4); 

 (4) A a(4); 


Номер 3
В каком порядке происходит вызов деструкторов при уничтожении объекта производного класса?

Ответ:

 (1) вызывается деструктор производного класса, затем деструкторы атрибутов производного класса и, потом, деструктор базового класса 

 (2) вызывается деструктор базового класса, затем деструкторы атрибутов базового класса и, потом, деструктор производного класса 

 (3) вызывается деструктор базового класса, затем деструктор производного класса и, потом, деструкторы атрибутов базового класса 


Упражнение 8:
Номер 1
Если в производном классе переопределена операция new то:

Ответ:

 (1) все объекты класса и все производные от этого класса будут использовать эту операцию 

 (2) производные от этого класса могут использовать глобальную операцию применив операцию ::new 

 (3) базовый класс также будет использовать переопределенную операцию 


Номер 2
В какой строчке данного кода сработает заданный в нем копирующий конструктор?
1  monstr::monstr(const monstr &М){
2  if (M.name){
3  name = new char [strlen(M.name) + 1];
4  strcpy(name, M.name);}
5  else name = 0;
6  health = M.health; ammo = M.ammo; skin = M.skin;
7  }
…
8  monstr Vasia (blue);
9 monstr Super = Vasia; 
10 monstr *m = new monstr ("Orc");
11 monstr Green = *m;


Ответ:

 (1) в шестой 

 (2) в пятой 

 (3) в четвертой 

 (4) в одиннадцатой 


Номер 3
Отметьте истинное высказывание для данного примера:
    
    Item::Item() : taken(false), invNumber(0)
    {  }
    

Ответ:

 (1) метод класса Item выделяет память под атрибуты класса taken и invNumber 

 (2) происходит инициализация атрибутов класса taken и invNumber 

 (3) происходит инициализация методов класса taken и invNumber 




Главная / Программирование / Язык программирования C++ / Тест 12