Ответы на тест 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();}
Корректны и идентичнынаугад