игра брюс 2048
Главная / Программирование / Программирование на С/С++ / Тест 171

Программирование на С/С++ - тест 171

Упражнение 1:
Номер 1
Какие утверждения о идиомах языка программирования верны?

Ответ:

 (1) язык С++ содержит много идиоматики 

 (2) идиомы описываются в стандарте языка 

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

 (4) идиомы языка программирования позволяют более точно и аккуратно выразить архитектурные мысли 

 (5) идиомы языка С++ группируются по поддерживаемым парадигмам программирования 


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

Ответ:

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

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

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

 (4) и классы и структуры одинаково могут использоваться в шаблонах 

 (5) структуры никогда не имеют конструкторов и деструкторов, в отличие от классов 


Номер 3
Какие из нижеприведённых идиом являются объектно-ориентированными идиомами?

Ответ:

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

 (2) связывание инициализации класса с его созданием 

 (3) использование бесконечных циклов 

 (4) автоматическое создание и удаление объектов в динамической и автоматической памяти 

 (5) копирование строки оператором цикла с пустым телом (копирование в условии цикла) 


Упражнение 2:
Номер 1

	//====================== start of sample.cpp ==========================
		class ARef
		{
		public:
			ARef(A &a, int i) : _a(a), _ix(i) {}
			ARef& operator= (T t) { return *this;}
			
			operator T() {return _t;}
			operator A() {return _a;}
			
			A& getA() { return _a;}
			
			bool operator == (A& a) {return _a == a;}
			
		private:
			A& _a;
			int _ix;
			T _t;
		};
		
		class A
		{
			friend class ARef;
		public:
			A() {}
			ARef operator[] (int ix) {return ARef(*this, ix);}    
			operator ARef() {return ARef(*this, ix);}
		};
	//======================  end of sample.cpp  ==========================
                
]]>Какие из методов класса ARef из файла sample.cpp являются необходимыми для поддержки идиомы контекстно-зависимой перегрузки операции индексирования агрегата?
Ответ:

 (1) operator= (T t); 

 (2) operator T(); 

 (3) operator A(); 

 (4) A& getA(); 

 (5) bool operator == (A& a); 


Номер 2

	//====================== start of sample.cpp ==========================
		class ARef
		{
		public:
			ARef(A &a, int i) : _a(a), _ix(i) {}
			ARef& operator= (T t) { return *this;}
			
			operator T() {return _t;}
			operator A() {return _a;}
			
			A& getA() { return _a;}
			
			bool operator == (A& a) {return _a == a;}
			
		private:
			A& _a;
			int _ix;
			T _t;
		};
		
		class A
		{
			friend class ARef;
		public:
			A() {}
			ARef operator[] (int ix) {return ARef(*this, ix);}
			operator ARef() {return ARef(*this, ix);}
		};
		
		int main() {
			A a;   int i, j;   T t;
			t = a[j];
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Какие из методов классов ARef и A из файла sample.cpp оказываются задействованы при операции t=a[j]?
Ответ:

 (1) ARef::operator= (T t); 

 (2) ARef::operator T(); 

 (3) ARef::operator A(); 

 (4) ARef A::operator[] (int ix) 

 (5) A::operator ARef(); 


Номер 3
Какие из приведённых ниже атрибутов класса являются необходимыми при реализации идиомы «подсчёт ссылок»?

Ответ:

 (1) счётчик ссылок 

 (2) физическое представление хранимого объекта 

 (3) ссылка на хранимый объект 

 (4) пул объектов памяти 


Номер 4
Какие из приведённых ниже действий являются необходимыми при реализации идиомы «подсчёт ссылок»?

Ответ:

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

 (2) присвоение счётчику ссылок начального значения при создании хранимого объекта 

 (3) создание пула памяти 

 (4) реализация оператора приведения к типу хранимого объекта 


Упражнение 3:
Номер 1
Какие из приведённых ниже сигнатур операций new и delete, которые могут быть перегружены указаны правильно?

Ответ:

 (1) void *operator new(size_t size); 

 (2) void operator delete(void *p); 

 (3) void operator delete[](void *p); 

 (4) void *operator new[](size_t size, void *p) 


Номер 2
По каким причинам может потребоваться перегрузка операторов new и delete - глобальных или класса?

Ответ:

 (1) для классов, создающих мелкие объекты - для экономии памяти 

 (2) для организации быстрого доступа к элементам контейнера STL 

 (3) при большом количестве операций создания-удаления объектов - для уменьшения фрагментации памяти 

 (4) при реализации своего «сборщика мусора» 

 (5) для организации доступа к закрытым членам класса 


Номер 3
Какие утверждения про реализацию перегруженных операторах new и delete класса верны?

Ответ:

 (1) выделяемую и хранимую свободную память лучше представлять, как массивы 4 или 8 байтовых чисел 

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

 (3) реализация оператора delete обязательно должна вызвать функцию free() для передаваемого в оператор блока памяти 

 (4) реализация оператора new может как использовать системные вызовы выделения памяти, так и отдавать хранимые свободные блоки памяти 


Упражнение 4:
Номер 1
В каких случаях используется идиома «Конверт/письмо»?

Ответ:

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

 (2) преодолевать ограничения системы контроля типов, состоящие в жёсткой привязке имён переменных к объектам 

 (3) при реализации своего «сборщика мусора» 

 (4) повышение эффективности одновременного использования памяти отдельными классами 


Номер 2
В чём состоит идиома «Конверт/письмо»?

Ответ:

 (1) разные конструкторы базового класса могут создавать объекты разных классов - наследников базового класса 

 (2) базовый класс содержит в себе ссылки на объекты унаследование классы - служит для них конвертом 

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

 (4) операторы new и delete переопределены для базового класса 

 (5) клиент обязан знать имена классов наследников 


Номер 3
Какие утверждения насчёт реализации идиомы «Конверт/письмо» верны?

Ответ:

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

 (2) требуется предотвращение рекурсивного вызова конструктора, путём объявления специального конструктора базового класса, не вызывающего никаких других конструкторов 

 (3) при необходимости возможно использование счётчика ссылок на объект - «письмо» 

 (4) классы наследники и базовый класс находятся в отношении агрегации 


Упражнение 5:
Номер 1
Какие утверждения про рефакторинг верны?

Ответ:

 (1) рефакторинг состоит из набора простых атомарных изменений кода 

 (2) рефакторинг не включает в себя изменения интерфейсов 

 (3) рефакторингу часто предшествует ревью кода 

 (4) рефакторинг помогает поддерживать качество продукта при продолжении разработки 

 (5) рефакторинг проводится тогда, когда больше не ожидается доработок и модификации программного продукта 


Номер 2
Какие цели могут быть достигнуты рефакторингом?

Ответ:

 (1) повышение читаемости кода 

 (2) устранение использования небезопасных функций 

 (3) убрано дублирование кода 

 (4) улучшение композиции программного обеспечения 

 (5) устранение неопределённого поведения программы 


Номер 3
Какие результаты могут быть достигнуты при статическом анализе кода?

Ответ:

 (1) повышение читаемости кода 

 (2) улучшение композиции программного обеспечения 

 (3) нахождение ошибок переполнения буфера 

 (4) устранение неопределённого поведения программы 

 (5) подготовка предложений по рефакторингу 


Упражнение 6:
Номер 1
Какие из приведённых ниже особенностей кода являются неудачными решениями в области кодирования, дизайна и архитектуры?

Ответ:

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

 (2) проверки интерфейса объекта вместо класса объекта 

 (3) обращение к неинициализированным переменным 

 (4) использование нескольких различных классов, вместо одного монолитного класса 

 (5) вставка в код фиксированных значений констант, ограничений и параметров конфигурации 


Номер 2
На поиск каких ошибок кодирования, являющихся типовыми, направлено ревью кода?

Ответ:

 (1) использование префиксного оператора «++» вместо постфиксного 

 (2) неверный способ передачи параметров 

 (3) неверная обработка «пустых указателей» 

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

 (5) неверная обработка краевых условий 


Номер 3
На что следует обратить внимание при оптимизации программ по производительности?

Ответ:

 (1) унификация используемых алгоритмов поиска 

 (2) программное кэширование результатов «тяжёлых» операций 

 (3) использование отложенной инициализации больших объектов 

 (4) использование группового режима выполнения операций 


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

Ответ:

 (1) унификация используемых алгоритмов поиска 

 (2) программное кэширование результатов «тяжёлых» операций 

 (3) наличие необязательных уровней косвенности 

 (4) эффективная работа с кэш-памятью процессора 


Упражнение 7:
Номер 1
Какие характеристики описывают «структурное качество» программы?

Ответ:

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

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

 (3) соответствие программы функциональным требованиям 

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

 (5) соответствие архитектуры критериям качества архитектуры 


Номер 2
Каким образом можно оценить «структурное качество» программы?

Ответ:

 (1) анализ описания архитектуры 

 (2) чтение пользовательской документации 

 (3) статический анализ кода 

 (4) тестирование функциональных характеристик программы 

 (5) чтение кода программы  


Номер 3
Какие утверждения про модели качества программ верны?

Ответ:

 (1) они моделируют функционирование программы 

 (2) они описывают характеристики программы с точки зрения различных заинтересованных сторон 

 (3) характеристики программы с точки зрения различных заинтересованных сторон описываются через наборы более детальных свойств программы 

 (4) в соответствии с некоторыми моделями качество программ может расти без внесения в неё изменений 

 (5) согласно моделям качества программ, свойства программ, описывающие качество программы, не поддаются количественной оценке 


Упражнение 8:
Номер 1
Каким показателем согласно модели SQuaRE, оценивается прочность и устойчивость системы, вероятность возникновения сбоев?

Ответ:

 (1) надёжность 

 (2) эффективность 

 (3) безопасность 

 (4) удобство сопровождения 

 (5) размер программы 


Номер 2
При оценке каких показателей согласно модели SQuaRE, предполагается рассмотрение соблюдение правил кодирования? 

Ответ:

 (1) надёжность 

 (2) эффективность 

 (3) безопасность 

 (4) удобство сопровождения 

 (5) размер программы 


Номер 3
При оценке каких показателей согласно модели SQuaRE, предполагается рассмотрение корректности обработки ошибок?

Ответ:

 (1) надёжность 

 (2) эффективность 

 (3) безопасность 

 (4) удобство сопровождения 

 (5) размер программы 


Номер 4
При оценке каких показателей согласно модели SQuaRE, предполагается анализ связности и переносимости кода?

Ответ:

 (1) надёжность 

 (2) эффективность 

 (3) безопасность 

 (4) удобство сопровождения 

 (5) размер программы 


Упражнение 9:
Номер 1
Какие утверждения про атрибут качества - сложность программы верны?

Ответ:

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

 (2) сложность легко поддаётся количественной оценке 

 (3) накопление технического долга увеличивает сложность 

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

 (5) соблюдение общепринятых правил ОО-программирования уменьшает сложность 


Номер 2
Какие свойства отличают несложный код?

Ответ:

 (1) модульность кода 

 (2) краткость кода 

 (3) использование объектно-ориентированного подхода 

 (4) слабая связность модулей кода 

 (5) использование перехватчиков сигналов операционной системы для обеспечения отказоустойчивости программы 


Номер 3
Какие факторы способствуют накоплению технического долга?

Ответ:

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

 (2) недостаточное использование моделей качества 

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

 (4) недостаток времени на проектирование архитектуры продукта 

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

 (6) большая длительность проекта 


Номер 4
Какие проблемы подразумеваются под понятием технический долг?

Ответ:

 (1) использование неподходящей технологии 

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

 (3) недостаток регрессионных тестов 

 (4) не соответствующий изменившейся предметной области дизайн кода 

 (5) не реализованная, но необходимая пользователям, функциональность продукта 

 (6) реализованная функциональность продукта, которая не будет использоваться 


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

Ответ:

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

 (2) стандарты оформления кода облегчают включение новых разработчиков в команду 

 (3) стандарты кодирования разработаны на основе исследований в различных областях математики и логики 

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

 (5) основу стандарта кодирования должны составлять низкоуровневые положения о оформлении кода (отступы, размер строки, имена переменных, итд.) 


Номер 2

	//====================== ==========================
		class A
		{
			int _i;
			char* _name;
		
		public:
			A();
			A(const A& a);
			~A();
			A& operator=(const A& a);
			bool operator==(const A& a) const;
			const char* getName() const;
		};
		
		class B
		{
		public:
			B(int i, const char* name);
			~B();
			bool operator==(const B& b) const;
			const char* getName() const;
			int getIndex() const;
		private:
			int _i;
			char* _name;
		};
		
		class C
		{
		public:
			C();
			C(C c);
			C(int i, const char* name);
			~C();
			C& operator=(C c);
		
			const char* getName() const;
			int getIndex() const;
			int setIndex();
		private:
			int _i;
			char* _name;
		};
		
		class D
		{
		public:
			D();
			D(const D& d);
			~D();
			D& operator=(const C& d);
			int _i;
			char* _name;
		};
	//======================   ==========================
                
]]>Код какого из приведённых в фрагменте кода классов соответствуют сложившимся эмпирическим правилам организации исходного кода на С++ и канонической форме класса?
Ответ:

 (1) ARef 

 (2) BRef 

 (3) CRef 

 (4) DRef 


Номер 3

	//====================== start of sample.hpp ==========================
		class ARef
		{
		public:
			/* Сonstructory */
			ARef(A& a, int i) : _a(a), _ix(i) {}
			/* operator= */
			ARef& operator= (T t) { return *this;}
		
		private:
			A& _a; // Reference to A object
			int _ix; // index in container
		};
		
		class BRef
		{
		public:
			BRef(B &b, int i) : _b(b), _ix(i) {}
			BRef& operator= (T t) { return *this;}
		private:
			B& _b;
			int _ix;
		};
		
		/*
		 * Class CRef имплементирует шаблон проектирования X
		 *   хранит в себе ссылку на коллекцию типа A, которая является коллекцией
		 *   объектов типа T и предоставляет к ним доступ
		 */
		class CRef
		{
		public:
			CRef(C &c, int i) : _c(c), _ix(i) {}
			CRef& operator= (T t) { return *this;}
		private:
			C& _c; /* та коллекция объектов, доступ к которой и предоставляется*/
			int _ix; /* индекс текущего объекта в контейнере */
		};
		
		/*
		 * Class DRef
		 */
		class DRef
		{
		public:
			// конструктор инициализирует объект
			DRef(D &d, int i) : m_d(d), _ix(i) {}
			// оператор возвращает ссылку на себя
			DRef& operator= (T t) { return *this;}
		private:
			D& m_d;  // хранимый объект
			int _ix; // индекс
		};
	//======================  end of sample.hpp  ==========================
                
]]>Комментарии какого из классов в файле sample.hpp являются необходимыми и достаточными?
Ответ:

 (1) ARef 

 (2) BRef 

 (3) CRef 

 (4) DRef 


Упражнение 11:
Номер 1
Чем отличаются различные стадии разработки в жизненном цикле разработки системы?

Ответ:

 (1) составом работ 

 (2) точкой зрения на систему 

 (3) на каждой стадии выполняется один, присущий только этой стадии тип работы 

 (4) существованием продукта. Он начинает существовать только с определённых стадий разработки 


Номер 2
В чём основные отличие «гибких» методологий, от методологий, основанных на "каскадной" модели жизненного цикла разработки ПО?

Ответ:

 (1) гибкие методологии предусматривают итеративная модель жизненного цикла 

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

 (3) гибкие методологии предусматривают динамическое формирование требований 

 (4) гибкие методологии предусматривают непосредственное общение с заказчиком в процессе разработки ПО 

 (5) гибкие методологии предусматривают другой набор стадий процесса разработки ПО 


Номер 3
В чём основные отличия процессов, основанных на "каскадной" модели жизненного цикла разработки ПО от итеративного процесса разработки?

Ответ:

 (1) итеративный процесс разработки предусматривает другой набор стадий процесса разработки ПО 

 (2) итеративный процесс разработки предусматривает многократное повторение всех этапов жизненного цикла производства ПО 

 (3) итеративный процесс разработки предусматривает непосредственное общение с заказчиком в процессе разработки ПО 

 (4) итеративный процесс разработки предусматривает одновременные работы, относящиеся к разным стадиям разработки ПО 




Главная / Программирование / Программирование на С/С++ / Тест 171