Ответы на тест 2. Информатика и программированиеОбъектно-ориентированное программирование (C++)
При прохождении теста с этими ответами было набрано 80% баллов
- C точки зрения С++ правилен ли приведенный код: const double CD = 2.5; double D; D=CD; CD = 5.0
 код ошибоченнельзя менять значение константы
- В приведенном объявлении производного класса class Derived: private First, private Third, public Second
 возможен прямой доступ только к членам класса Second
- В языке С++ функция может быть вызвана:
 только после ее объявления и определенияпод сомнением
- Выберите верный вариант объявления метода M() класса A другом класса B:
 class B {friend void A::M(); // объявление членов класса}под сомнением
- Вычислите fn(7): #include using namespace std; class ww {public: int fn(int v) { if(v==1 || v==0) return 1; if(v%2==0) return (v/2) + 2; else return (v-1) + 3; };};int main() {ww w1; cout << w1.fn(7) << endl; system ("pause"); return 0;}.
 9проверено в VS2010
- Деструктор
 не принимает никаких аргументов и не может быть перегруженинфа 100%
- Должен ли метод, объявленный как виртуальный в базовом классе, быть объявленным как виртуальный в производных классах?
 Не долженпод сомнением
- Должна ли функция, реализующая перегруженный оператор для некоторого класса, быть дружественной этому классу?
 Должна в том случае, если для реализации оператора необходимо иметь доступ к защищенным членам классапод сомнением
- Если какое-либо имя члена класса в производном классе совпадает с именем члена в одном или нескольких базовых классах, то
 выбирается член производного классапод сомнением
- Если при описании класса конструктор не был задан, то
 компилятор сгенерирует для класса стандартный конструктор
- Если функция уже однажды была объявлена виртуальной, то
 она остается таковой на любом более низком уровне иерархии
- Какое обращение к функции в приведенном фрагменте программы будет правильным? #include using namespace std; template T mах(T а, T b) { if (a > b) return(a); else return(b); } int main() { setlocale(LC_ALL,"Russian"); cout << "Максимум 100 и 200 равен " << max(100, 200) << endl; cout << "Максимум 5.4321 и 1.2345 равен " << max(5.4321, 1.2345) << endl; system("pause"); return 0; }
 max(100, 200) и max(5.4321, 1.2345)
- Конструкторы
 не наследуются, поэтому производный класс должен иметь собственные конструкторыинфа 100%
- Механизм наследования классов позволяет
 строить иерархии, в которых производные классы получают элементы родительских или базовых классов и могут дополнять их или изменять их свойстваинфа 100%
- Модификатор private: имя секции следует использовать если:
 Данные и методы, помещенные в эту секцию, будут доступны методам этого класса. Доступ к ним методам производных классов запрещен
- Модификатор protected: имя секции следует использовать если:
 Данные и методы, помещенные в эту секцию, будут доступны методам этого класса и производным от него, т.е. его потомкаминфа 100%
- Модификатор public: имя секции следует использовать если:
 Данные и методы, помещенные в эту секцию, будут доступны методам всех классовинфа 100%
- Может ли абстрактный метод не быть виртуальным?
 Не может, любой абстрактный метод автоматически является виртуальнымнаугад
- Можно ли определять классы, для которых не будут создаваться никакие объекты.
 да, такие классы называются абстрактными
- Полиморфизм – это
 возможность для объектов разных классов, связанных с помощью наследования, реагировать различным образом при обращении к одной и той же функции-члену
- Попытка создать объект абстрактного класса:
 даст синтаксическую ошибку
- Производный класс
 не может иметь доступ к закрытым элементам своего базового классапод сомнением
- С точки зрения С++ правилен ли приведенный фрагмент кода: # include using namespace std; class A {protected: int x;int y; public: int a; int y; int f1(int x, int y) {return (x-y);} };
 компиляция вызовет ошибкупроверено в VS2010: ошибка int A::y: переопределение
- С точки зрения С++ правилен ли приведенный фрагмент кода: #include #include using namespace std; template class array { public: array(int size_); T1 sum_(void); average_value(void); void show_array(void); int add_value(T); private: T *data; int size; int index; }
 код содержит синтаксическую ошибкупод сомнением
- Сокрытие информации (инкапсуляция) – это
 маскирование деталей реализации функции, класса или программыпод сомнением
- Функция для перегрузки оператора имеет вид:
 Тип operator операция (список параметров) {тело функции}
- Чему равна переменная х?  int p = 5; int x = ++p++ + 1
 7проверено в VS2010
- Чему равна переменная х? int p = 5; int x; x = ++p + 1
 7проверено в VS2010
- Чему равна переменная х? int p = 5; int x; x = p++ + 1
 6проверено в VS2010
- Чисто виртуальные методы класса предоставляют потомкам класса:
 Базовую функциональностьнаугад
- Чистой виртуальной функцией является такая функция, у которой
 в ее объявлении тело определено как 0 (инициализатор равен 0)
- Шаблон класса имеет вид:
 template <список параметров> class объявление класса
- Являются ли следующие записи корректными и идентичными?  class cA { int value; void method();} и struct sA {int value; void method();}
 Корректны и идентичнынаугад
