Главная / Программирование /
Программирование на С/С++ / Тест 76
Программирование на С/С++ - тест 76
Упражнение 1:
Номер 1
//====================== start of sample.cpp ==========================
struct Book {
short year;
char* author;
char* name;
};
class Person {
short m_age;
const char* m_name;
const char* m_subname;
public:
Person(short age, const char* name, const char* subname)
: m_age(age), m_name(name), m_subname(subname){}
};
class Library {
public:
long m_books_count;
char* m_name;
char* m_city;
Library(long books_count): m_books_count(books_count){}
};
int main() {
Book book1 = {"Owrell", 1984, "1984"};
Book book2 = {1984};
Person main_author = {65, "Bjarne", "Stroustrup"};
Person my_author(65, "Bjarne", "Stroustrup");
Library my_lib = 25;
return 0;
}
//====================== end of sample.cpp ==========================
]]>Инициализация каких объектов в файле sample.cpp выполнена корректно?
Ответ:
 (1) book1 
 (2) book2 
 (3) main_author 
 (4) my_author 
 (5) my_lib 
Номер 2
Каковы преимущества использования конструктора с параметрами перед явной позиционной инициализацией объекта класса?
Ответ:
 (1) поддержка инкапсуляции и абстрактных типов 
 (2) облегчение сопровождаемости кода и уменьшение вероятности ошибки 
 (3) эффективность с точки зрения затрат процессорного времени 
 (4) инициализируются как открытые, так и закрытые атрибуты класса 
Номер 3
//====================== start of sample.cpp ==========================
class Person
{
short m_age;
char* m_name;
char* m_subname;
public:
Person(short age, char* name, char* subname)
: m_age(age), m_name(name), m_subname(subname){}
};
class Library
{
public:
long m_books_count;
const char* m_name;
const char* m_city;
};
int main()
{
Library my_lib = {1240, "Main", "DefaultCity"};
Library *p_lib = new Library;
Library empty_lib;
Person any_person(25, "Djon","S");
Person *pother_person = new Person;
return 0;
}
//====================== end of sample.cpp ==========================
]]>Инициализация каких объектов в файле sample.cpp выполняется корректно конструктором по умолчанию?
Ответ:
 (1) p_lib 
 (2) empty_lib 
 (3) any_person 
 (4) pother_person 
Упражнение 2:
Номер 1
Какие утверждения про конструктор с параметрами верны?
Ответ:
 (1) конструктор с параметрами позволяет инициализировать как открытые, так и закрытые атрибуты класса 
 (2) конструктор с параметрами может быть использован в качестве конструктора по умолчанию 
 (3) если у класса не объявлен ни одни конструктор, то объект класса не может быть помещён ни в один из стандартных контейнеров STL 
 (4) использование конструктора с параметрами позволяет более эффективно, с точки зрения загрузки процессора, инициализировать атрибуты класса 
Номер 2
//====================== start of sample.cpp ==========================
#include <vector>
class Person
{
short m_age;
const char* m_name;
const char* m_surname;
public:
Person(short age, const char* name, const char* subname)
: m_age(age), m_name(name), m_surname(subname){}
Person()
: m_name("unknown"){}
};
class Reader: public Person
{
long m_ticket_number;
public:
Reader(long tick_numb = 0)
: Person()
, m_ticket_number(tick_numb) {}
Reader(short age, const char* name, const char* surname, long tick_numb)
: Person(age, name, surname)
, m_ticket_number(tick_numb){}
};
int main()
{
Reader reader1;
Reader reader2 = 35;
Reader reaedr3(22, "Vasily", "Ivanov", 123456);
return 0;
}
//====================== end of sample.cpp ==========================
]]>Значения каких атрибутов каких объектов корректно инициализируются не нулевыми значениями?
Ответ:
 (1) reader1.m_age 
 (2) reader1.m_name 
 (3) reader1.m_ticket_numbe 
 (4) reader2.m_ticket_number 
 (5) reaedr3.m_age 
Номер 3
//====================== start of sample.cpp ==========================
int main()
{
Reader readers1[] = {"", ""};
std::vector readers2;
Reader reaedr3 = {(22, "Vasily", "Ivanov", 123456), (45, "Alex", "V", 993421) };
return 0;
}
//====================== end of sample.cpp ==========================
]]>Какие конструкторы должны быть определены для типа Reader, что бы инициализации массивов объектов этого типа и объявления контейнеров, приведённые в файле sample.cpp были успешными?
Ответ:
 (1) Reader() 
 (2) Reader(unsigned long) 
 (3) Reader(const char*) 
 (4) Reader(unsigned long, const char*, const char*, unsigned long) 
 (5) можно явно не определять ни одни конструктор 
Упражнение 3:
Номер 1
Для чего могут служить закрытые и защищённые конструкторы?
Ответ:
 (1) предотвращение создания объектов класса из кода, который находится вне класса 
 (2) предотвращение операций копирования объектов класса 
 (3) преобразованию объектов класса в простые типы 
 (4) запретить создание объектов класса, доступных в коде программы 
 (5) оптимальное использование контейнеров стандартной библиотеки 
Номер 2
В каких случаях происходит по членная инициализация объекта класса?
Ответ:
 (1) тогда, когда в классе не объявлено ни одного конструктора 
 (2) тогда, когда в классе объявлен только конструктор без параметров 
 (3) тогда, когда в классе есть только конструкторы с параметрами 
 (4) для объектов структур, у которых нет ни одного конструктора 
 (5) для объектов классов, у которых конструктор без параметров объявлен защищённым 
Номер 3
//====================== start of sample.cpp ==========================
class Person
{
public:
short m_age;
const char* m_name;
const char* m_surname;
};
class Library
{
public:
long m_books_count;
std::string m_name;
static std::string m_city;
};
class Program
{
public:
std::string prog_name;
long version;
void* prog_data;
};
class Region
{
public:
short country_code;
short city_code;
std::shared_ptr<Library< main_library;
};
//====================== end of sample.cpp ==========================
]]>Для какого из классов в фрагменте файла sample.cpp необходима реализация своего оператора копирования?
Ответ:
 (1) Person 
 (2) Library 
 (3) Program 
 (4) Region 
 (5) нет необходимости ни для одного класса 
Упражнение 4:
Номер 1
Какой из приведённых конструкторов копирования соответствуют канонической форме класса?
Ответ:
 (1) Person(const Person* org); 
 (2) Person(Person* org); 
 (3) Person(const Person& org); 
 (4) Person(Person& org); 
 (5) Person(Person org); 
Номер 2
//====================== start of sample.cpp ==========================
#include <stdio.h>
class Region;
class Person
{
public:
short m_age;
const char* m_name;
const char* m_surname;
const char* m_region_name;
Person(const char* name) : m_name(name) {}
operator short () {return m_age;}
operator const char* () {return "";}
};
class Region
{
public:
const char* region_name;
const char* cheef_name;
long size;
Region(const char* region_nm = "") : region_name(region_nm) {}
operator long () {return size;}
operator const char* () {return region_name;}
};
int main()
{
Person p1("Vasily Ivanov");
Region r;
printf("Region number %u, driver %s", static_cast<unsigned short>(r), static_cast<const char*>(p1));
return 0;
}
//====================== end of sample.cpp ==========================
]]>Какие из имеющихся в файле sample.cpp конструкторов и операторов преобразования задействованы в операциях в функции main()?
Ответ:
 (1) Person::Person(const char* name) 
 (2) Person::operator short () 
 (3) Person::operator const char* () 
 (4) Region(const char* region_nm = "") 
 (5) Region::operator long () 
 (6) Region::operator const char* () 
Номер 3
//====================== start of sample.cpp ==========================
class Region;
class Person
{
public:
short m_age;
const char* m_name;
const char* m_surname;
const char* m_region_name;
Person(const char* name) : m_name(name) {}
operator short () {return m_age;}
operator const char* () {return "";}
operator Region* ();
};
class Region
{
public:
const char* region_name;
const char* cheef_name;
long size;
Region(const char* region_nm) : region_name(region_nm) {}
operator long () {return size;}
operator const char* () {return region_name;}
operator Person () {return Person(cheef_name);}
};
Person::operator Region* () {return new Region(m_region_name);}
//====================== end of sample.cpp ==========================
]]>Какие операторы преобразования класса Person не являются корректными с точки зрения архитектуры?
Ответ:
 (1) Person::operator short (); 
 (2) Person::operator const char* (); 
 (3) Person::operator Region* (); 
 (4) Region::operator long (); 
 (5) Region::operator const char* (); 
 (6) Region::operator Person (); 
Упражнение 5:
Номер 1
С какими вариантами модификаторов и сигнатур могут быть деструкторы?
Ответ:
 (1) статический деструктор 
 (2) деструктор без модификаторов 
 (3) виртуальный деструктор 
 (4) деструктор с модификатором const 
 (5) деструктор с модификатором throw 
 (6) деструктор с одним параметром 
Номер 2
Какие операции обычно может выполнять деструктор?
Ответ:
 (1) закрытие файлов 
 (2) выделение памяти 
 (3) проверка пред-условий возможности удаления объекта 
 (4) освобождение примитивов синхронизации 
 (5) открытие сетевого соединения 
Номер 3
Как в языке С++ поддерживается идиома RAII?
Ответ:
 (1) идиома поддерживается наличием в классе конструкторов и деструкторов 
 (2) поддерживается генерацией исключений при ошибках 
 (3) поддержка основана гарантированном вызове деструкторов автоматических переменных при выходе из зоны видимости 
 (4) умные указатели стандартной библиотеки поддерживают идиому RAII 
 (5) операторы приведения к простым типам поддерживают идиому RAII 
Номер 4
Какие утверждения относительно идиомы RAII верны?
Ответ:
 (1) идиома RAII охватывает стадию выделения ресурсов и стадию освобождения ресурсов 
 (2) это идиома относится только к языкам Java и С++ 
 (3) суть идиомы в выделении ресурсов при создании объектов и освобождении ресурсов при уничтожении объектов 
 (4) идиома RAII описывает отложенную инициализацию объектов для повышения быстродействия программы 
 (5) идиома не привязана к конструкторам и деструкторам  
Упражнение 6:
Номер 1
Какие утверждения насчёт явного вызова деструктора верны?
Ответ:
 (1) при явном вызове деструктора не происходит освобождение памяти, занятого объектом 
 (2) работает в паре с оператором new c параметром - указателем на памяти, в которой должен быть размещён объект 
 (3) после явного вызова деструктора память нельзя снова использовать, необходимо её обязательно освободить 
 (4) после явного вызова деструктора память можно повторно использовать только под объекты этого же типа 
Номер 2
//====================== start of sample.cpp ==========================
#include <vector>
class Person
{
public:
short m_age;
const char* m_name;
const char* m_surname;
const char* m_region_name;
};
class Region
{
public:
const char* region_name;
const char* cheef_name;
long size;
};
int main()
{
std::vector<unsigned char>* mybuffer = new std::vector<unsigned char>(sizeof(Person) + sizeof(Region), 0);
Person* my_person = new (&(mybuffer->at(0))) Person();
my_person->~Person();
delete my_person;
Region* p_region = new (&(mybuffer->at(0))) Region();
p_region->~Region();
delete p_region;
delete mybuffer;
return 0;
}
//====================== end of sample.cpp ==========================
]]>Какие операции освобождений ресурсов в файле sample.cpp являются лишними или ошибочными?
Ответ:
 (1) my_person->~Person(); 
 (2) delete my_person; 
 (3) p_region->~Region(); 
 (4) delete p_region; 
 (5) delete mybuffer 
 (6) нет ошибочных и лишних операций освобождения ресурсов 
Номер 3
Какие операции выполняются в конструкторе?
Ответ:
 (1) выделение памяти под объект создаваемого класса 
 (2) инициализация членов класса, заданных в списке инициализации 
 (3) инициализация членов класса базового типа, не заданных в списке инициализации 
 (4) инициализация членов класса пользовательского типа, не заданных в списке инициализации 
 (5) выполнение тела конструктора 
Номер 4
//====================== start of sample.cpp ==========================
#include <vector>
class ServiceOrganization;
class Building
{
static char* m_city;
const unsigned int m_high_size;
std::vector<int> m_flats;
unsigned int m_square;
ServiceOrganization& m_organization;
public:
Building();
};
int main()
{
Building house;
return 0;
}
//====================== end of sample.cpp ==========================
]]>Какие члены класса Building из файла sample.cpp обязательно должны быть инициализированы в списке инициализации?
Ответ:
 (1) m_city 
 (2) m_high_size 
 (3) m_flats 
 (4) m_square 
 (5) m_organization 
Упражнение 7:
Номер 1
Какие утверждения верны относительно конструктора переноса и оператора присваивание с переносом?
Ответ:
 (1) могут служить для передачи владения файлами 
 (2) в качестве входного параметра используется ссылка на право-допустимое значение 
 (3) могут служить для обеспечения доступа 2-х и более объектов к области памяти на который указывает атрибут класса 
 (4) методы класса с семантикой переноса позволяют повысить быстродействие и уменьшить потребности в памяти 
Номер 2
//====================== start of sample.cpp ==========================
#include <stdio.h>
#include <stdlib.h>
#include <vector>
class ServiceOrganization;
class BuildingElement
{
static char* m_city;
std::vector<int> m_flats;
unsigned int m_square;
ServiceOrganization& m_organization;
FILE *m_document;
BuildingElement* m_pNext;
public:
BuildingElement();
BuildingElement(BuildingElement&& src)
: m_square(0)
, m_organization(src.m_organization)
, m_document(src.m_document)
, m_pNext(src.m_pNext)
{
m_flats = src.m_flats;
src.m_flats.clear();
src.m_organization = ServiceOrganization();
::fclose(src.m_document);
src.m_document = NULL;
::free(src.m_pNext);
src.m_pNext = NULL;
}
};
//====================== end of sample.cpp ==========================
]]>Какие операции, выполняемые в конструкторе переноса в файле sample.cpp являются лишними?
Ответ:
 (1) src.m_flats.clear(); 
 (2) src.m_organization = ServiceOrganization(); 
 (3) ::fclose(src.m_document); 
 (4) src.m_document = NULL; 
 (5) ::free(src.m_pNext); 
 (6) src.m_pNext = NULL; 
Номер 3
Чем отличается оператор присваивания от оператора присваивания с переносом?
Ответ:
 (1) используются умные указатели на передаваемые ресурсы объекта класса 
 (2) в качестве входного параметра используется ссылка на право-допустимое значение 
 (3) передаваемый в качестве параметра объект должен быть уничтожен в коде оператора 
 (4) передаваемые в класс-приёмник ресурсы объекта-источника, должны быть обнулены в объекте-источнике 
Упражнение 8:
Номер 1
В каких случаях проявляется проблема множественного наследования?
Ответ:
 (1) базовый класс имеет двух наследников 
 (2) производный класс унаследован от 2-х родительских классов, которые в свою очередь от наследованы от 2-х других разных классов 
 (3) производный класс унаследован от 2-х родительских классов, которые в свою очередь от наследованы от одного и того же базового класса 
 (4) производный класс унаследован от 2-х или более родительских классов, каждый из которых находится в своём namespace 
Номер 2
Каким образом предполагается решать проблему множественного наследования в языке С++?
Ответ:
 (1) запрет множественного наследования 
 (2) активное использование шаблонов 
 (3) использование виртуального наследования 
 (4) замена наследования на владение объектом класса для одного из родительских классов 
Номер 3
Какие утверждения насчёт полиморфизма верны?
Ответ:
 (1) полиморфизм это отношения между базовым и производным классом, имеющими общий открытый интерфейс 
 (2) полиморфизм это отношения, позволяющие компилятору возможность работы с производным классом по ссылке на базовый класс 
 (3) полиморфизм позволяет использовать объект базового класса как объект производного класса 
 (4) ссылка на объект одного производного класса может быть использована для адресации объекта другого производного класса, унаследованного от того же базового класса 
 (5) полиморфизм реализуется через отложенное разрешение вызова методов класса 
Номер 4
Какие утверждения насчёт позднего связывания верны?
Ответ:
 (1) реализуется через механизм виртуальных методов класса 
 (2) является особенностью объектного подхода 
 (3) заключается в том, что решение о том метод какого класса будет вызван принимается в момент компиляции программы 
 (4) позднее связывание является путём реализации полиморфизма 
Упражнение 9:
Номер 1
Какие утверждения насчёт абстрактных и конкретных классов верны?
Ответ:
 (1) объект абстрактного класса не может быть создан 
 (2) у абстрактного класса не все методы имеют определение 
 (3) любой класс, унаследованный от абстрактного является конкретным классом и объект этого класса может быть создан 
 (4) абстрактные базовые классы специфицируют открытые интерфейсы и содержат общие для всей иеархии методы и атрибуты 
 (5) конкретный класс обязательно должен быть наследником абстрактного класса 
 (6) конкретный класс - это класс, объект которого можно создать 
Номер 2
//====================== start of sample.cpp ==========================
class Person
{
public:
long GetAge();
bool IsMale();
};
class Trader: private Person
{
public:
long GetAge();
long GetAccount();
};
class Worker
{
public:
long GetExperience();
long GetSalary();
};
class Developer : public Worker, private Person
{ };
class Boss: protected Worker
{
public:
unsigned short GetLevel();
const char* GetDepartment();
};
class HeadOfAll: public Boss
{};
//====================== end of sample.cpp ==========================
]]>Для какого из производных классов в файле sample.cpp наследование выполнено для наследования интерфейса?
Ответ:
 (1) Trader 
 (2) Developer 
 (3) Boss 
 (4) HeadOfAll 
Номер 3
Методы и атрибуты базового класса с каким модификатором доступа доступны классам потомкам?
Ответ:
 (1) public 
 (2) private 
 (3) protected 
 (4) по умолчанию (без указания модификатора доступа) 
Номер 4
//====================== start of sample.cpp ==========================
class Input
{
public:
Input();
};
class Output
{
public:
Output();
};
class USBInput
{ };
class USBOutput
{
};
class SimpleComputer
{
long m_memory;
const char* m_processor;
Input m_input;
Output m_output;
public:
long GetPerformance();
void Start();
void Reset();
};
class PersonalComputer: public SimpleComputer
{
USBInput m_input;
UserOutput m_output;
};
class LaptopComputer: public PersonalComputer
{
const char* m_processor;
public:
void Start();
void Reset();
};
//====================== end of sample.cpp ==========================
]]>Какие атрибуты и методы базового класса SimpleComputer в файле sample.cpp остались не перекрыты в унаследованном классе LaptopComputer?
Ответ:
 (1) m_memory 
 (2) m_processor 
 (3) m_input 
 (4) GetPerformance() 
 (5) Start() 
Упражнение 10:
Номер 1
//====================== start of sample.cpp ==========================
class Computer
{
public:
Computer(OutPutDev& outdev)
: m_proc("amd64")
, m_disk2(1024)
, m_disk1(128)
, m_mem(4096)
, m_output(outdev)
{
m_pinput = new InputDev();
}
private:
Processor m_proc;
HDDDev m_disk1;
HDDDev m_disk2;
InputDev* m_pinput;
OutPutDev& m_output;
Memory m_mem;
};
//====================== end of sample.cpp ==========================
]]>Какие утверждения о порядке вызовов конструкторов классов при создании объекта типа Computer в файле sample.cpp верны?
Ответ:
 (1) атрибут m_proc инициализируется раньше всех 
 (2) для атрибута m_disk1 конструктор вызывается после вызова конструктора атрибута m_disk2 
 (3) конструктор InputDev для аттрибута m_pinput вызывается перед вызовом конструктора для инициализации атрибута m_mem 
 (4) конструктор OupPutDev для атрибута m_output вызывается до вызова конструктора класса Computer 
Номер 2
//====================== start of sample.cpp ==========================
class Input {
public:
Input();
};
class USBInput: public Input {
public:
USBInput(): Input() {}
};
class Device {
public:
Device();
};
class ManualUserDev: public Device {
public:
ManualUserDev() : Device()
{}
};
class Keyboard: public USBInput, public ManualUserDev {
public:
Keyboard(): ManualUserDev(), USBInput() {}
};
//====================== end of sample.cpp ==========================
]]>Тело конструктора какого класса будет исполнено последним перед вызовом тела конструктора Keyboard при создании класса типа Keyboard?
Ответ:
 (1) Device 
 (2) ManualUserDev 
 (3) Input 
 (4) USBInput 
Номер 3
//====================== start of sample.cpp ==========================
class Input {
public:
Input();
~Input();
};
class USBDev {
public:
~USBDev();
};
class USBInput: public Input {
USBDev m_dev;
public:
USBInput(): Input() {}
~USBInput();
};
class Device {
public:
Device();
~Device();
};
class ManualUserDev: public Device {
public:
ManualUserDev() : Device() {}
~ManualUserDev();
};
class Key {
public:
~Key();
};
class Keyboard: public USBInput, public ManualUserDev {
Key* key;
public:
Keyboard(): ManualUserDev(), Input() {key = new Key();}
~Keyboard()
{
delete key;
}
};
//====================== end of sample.cpp ==========================
]]>В каком порядке вызываются деструкторы при удалении объекта Keyboard из файла sample.cpp?
Ответ:
 (1) самым первым вызывается деструктор Key 
 (2) деструктор ManualUserDev вызывается после деструктора USBDev 
 (3) деструктор USBDev вызывается раньше, чем деструктор Input 
 (4) деструктор USBInput вызывается раньше, чем деструктор Key 
Упражнение 11:
Номер 1
Какие утверждения про виртуальные методы верны?
Ответ:
 (1) по умолчанию в С++ все методы виртуальные 
 (2) метод объявленный виртуальным в базовом классе обязательно должен быть перегружен в классе потомке 
 (3) метод объявленный виртуальным в базовом классе будет виртуальным во всех потомках класса 
 (4) использование виртуальных методов включает полиморфизм и возможность позднего связывания 
 (5) виртуальность метода можно подавить 
Номер 2
Какие утверждения про чисто виртуальные методы и абстрактные классы верны?
Ответ:
 (1) у чисто виртуальный функции нет тела 
 (2) абстрактный класс является лучшим способом задать интерфейс объектов в С++ 
 (3) потомок абстрактного класса обязательно должен перекрыть все виртуальные методы базового абстрактного класса 
 (4) прототипы функций класса наследника должны во всех случаях в точности повторять прототипы виртуальных методов базового класса 
 (5) описание интерфейсов с помощью абстрактных классов повышает производительность разрабатываемых программ 
Номер 3
//====================== start of sample.cpp ==========================
class Input {
public:
Input();
~Input();
};
class USBInput: public Input {
public:
USBInput();
virtual ~USBInput();
};
class Device {
public:
Device();
~Device();
};
class USBDevice: virtual public Device {
public:
USBDevice();
virtual ~USBDevice();
};
class ManualUserDev: public virtual USBInput {
public:
ManualUserDev();
virtual ~ManualUserDev();
};
class Key {
public:
Key();
~Key();
};
class Keyboard: public Input, public Key {
public:
Keyboard();
~Keyboard();
};
//====================== end of sample.cpp ==========================
]]>Для которых из классов в файле sample.cpp в конструкторе может потребоваться явно вызвать конструкторы базовых классов?
Ответ:
 (1) Keyboard 
 (2) ManualUserDev  
 (3) USBDevice 
 (4) USBInput 
 (5) ни для каких 
Упражнение 12:
Номер 1
Какие операции в языке С++ поддерживают RTTI?
Ответ:
 (1) sizeof 
 (2) dynamic_cast 
 (3) typeid 
 (4) reinterprent_cast 
Номер 2
//====================== start of sample.cpp ==========================
class Input {
public:
Input();
~Input();
virtual void f();
};
class ManualUserDev: public Input {
public:
ManualUserDev();
virtual ~ManualUserDev();
};
class Keyboard: public Input {
public:
Keyboard();
~Keyboard();
};
int main() {
Keyboard keyboard;
Input& rinp = keyboard;
Input* pinp = &:keyboard;
ManualUserDev& rmy_mdev = dynamic_cast<ManualUserDev&>(rinp);
ManualUserDev* pmy_mdev = dynamic_cast<ManualUserDev*>(pinp);
Keyboard& rmy_keyboard = dynamic_cast<Keyboard&>(rinp);
Keyboard* pmy_keyboard = dynamic_cast<Keyboard*>(pinp);
return 0;
}
//====================== end of sample.cpp ==========================
]]>При инициализации какой переменной в файле sample.cpp будет брошено исключение?
Ответ:
 (1) rmy_mdev 
 (2) pmy_mdev 
 (3) rmy_keyboard 
 (4) pmy_keyboard 
Номер 3
Какие утверждения о структуре type_info верны?
Ответ:
 (1) объекты типа type_info можно присваивать друг другу и сравнивать друг с другом 
 (2) возвращается операцией typeid 
 (3) реализация структуры type_info стандартизована 
 (4) содержит идентификатор класса 
Номер 4
Какие утверждения про производительность работы объектно-ориентированных программ на С++ верны?
Ответ:
 (1) отмена механизма виртуализации бывает необходима по соображениям повышения эффективности 
 (2) вызов виртуальной функции значительно дороже чем вызов функции по указателю 
 (3) глубина иерархии наследования не сказывается на производительность создания объектов при использовании встроенных конструкторов 
 (4) глубина иерархии наследования не увеличивает затраты времени на доступ к унаследованным членам классов 
 (5) глубина иерархии наследования ограничивает доступ к унаследованным членам классов