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

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

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

Как можно определить бинарную операцию?


Ответ:

 (1) как функцию, принимающую два параметра 

 (2) как функцию, принимающую один параметр 

 (3) обоими способами 


Номер 2

Что будет выведено на экран после выполнения программы?

int main() { int i, j; j = 0; for( i = 0; i < 10; i++) { j++; if (j == 5) continue; } cout << j; return 0; }

Ответ:

 (1) 0 

 (2) 5 

 (3) 10 

 (4) 11 


Номер 3

Как можно определить унарную операцию?


Ответ:

 (1) только как функцию, без параметров 

 (2) только как функцию, принимающую один параметр 

 (3) как функцию, без параметров или как функцию, принимающую один параметр 


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

Чему будет равна переменная x перед выходом из данной функции?

void f() { int x = 2; x = x++; }

Ответ:

 (1) 1 

 (2) 2 

 (3) 3 


Упражнение 3:
Номер 1
Укажите постфиксную операцию декремента?

Ответ:

 (1) T* operator--(); 

 (2) T* operator--(int); 

 (3) нет верного ответа 


Номер 2

Какой из этих операторов сложения возвращает сумму по значению?

  • operator+();
  • operator++();

  • Ответ:

     (1) 1  

     (2)

     (3) 1 и 2 

     (4) никакой 


    Номер 3

    Какой из этих операторов сложения возвращает сумму по ссылке?

  • operator+();
  • operator++();

  • Ответ:

     (1) 1  

     (2)

     (3) 1 и 2 

     (4) никакой 


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

    Будет ли работать этот оператор?

    MyClass operator+(MyClass x1, MyClass x2) { int sum= x1.a + x2.a; return *new MyClass(sum); }

    Ответ:

     (1) будет 

     (2) не будет 

     (3) будет, но с утечкой памяти 


    Номер 2
    Дано частичное определение класса MyClass:
    class MyClass {
      int a;
      //...
    public:
      MyClass(int);
      MyClass(const MyClass&);
      //...
    };
    
    

    Будет ли работать этот оператор:

    MyClass operator+(MyClass x1, MyClass x2) { int sum= x1.a + x2.a; MyClass result(sum); return result; }

    Ответ:

     (1) будет 

     (2) не будет, потому что result - локальный объект 

     (3) не будет, потому что произойдет ошибка компиляции 

     (4) будет, но с утечкой памяти 


    Номер 3

    Какие из перечисленных операторов не следует реализовывать как внешние функции, а только как функции-члены класса:


    Ответ:

     (1) = 

     (2) () 

     (3) == 

     (4) + 

     (5) -> 


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

    Класс Point имеет данные-члены int x,y. Какая из следующих операторных функций содержит ошибку?


    Ответ:

     (1) int Point::operator[] (int i) {if ( i == 0) return x; if(i==1) return y; else return -1;} 

     (2) bool Point::operator==(Point a) { return (x==a.x && y==a.y);} 

     (3) double Point::operator()() {return sqrt(x*x+y*y);} 

     (4) Point& Point::operator++() {x++; y++; return this;} 


    Номер 2

    Класс Point имеет данные-члены int x,y. Какая из следующих операторных функций содержит ошибку?


    Ответ:

     (1) Point& Point::operator++() {x++; y++; return *this;} 

     (2) Point& Point::operator--(Point &a) { a.x--;a.y--;return a;}  

     (3) Point operator--(Point& a,int n) { Point temp=a; if(n!=0) {for(int i=0;i<n;i++) --a;} else --a; return temp; } 


    Номер 3

    Класс Point имеет данные-члены int x,y. Какая из следующих операторных функций содержит ошибку?


    Ответ:

     (1) Point& operator--(Point& a) { a.x--;a.y--; return a;}  

     (2) Point Point::operator+(Point& a) { Point b; b.x=x+a.x; b.y=y+a.y; return b;}; 

     (3) double Point::operator() {return sqrt(x*x+y*y);} 


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

    Выберете корректное объявление

    1.class A{ friend A&operator+(A&a, A&b); }; A&operator+(A&a, A&b); 2.class A{ friend A&operator+(A&b); }; A&A::operator+(A&a, A&b); 3.class A{ A&operator+(A&b); }; friend A&A::operator+(A&a, A&b);

    Ответ:

     (1) 1 

     (2) 2 

     (3) 3 


    Номер 2

    Чему будет равняться переменная "z" после выполнения следующего кода:

    int SUMM(int x, int y) { return (x+y); } int main() { int z=0; { int x=1; int y=3; } z=SUMM(x,y); return 0; }

    Ответ:

     (1) 0 

     (2) 1 

     (3) 4 

     (4) компилятор выдаст ошибку компиляции 


    Номер 3

    Выберите верное утверждение:


    Ответ:

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

     (2) объявление функции косвенного обращения имеет вид Имя_класса* operator->() 

     (3) объявление функции косвенного обращения имеет вид Имя_класса* operator-> 

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

     (5) в случае перегрузки оператора доступа к членам класса доступ к этим членам осуществляется путем указания перед стрелкой указателя на объект 


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

    Чему будет равняться значение переменной x после выполнения следующего кода:

    #include "iostream.h" #include "conio.h" int main() { int x=1; M2:; for(int i=1;i<5;i++,x++); if(x>5) goto M1; else goto M2; M1: cout<<x; getch(); return 0; }

    Ответ:

     (1) компилятор выдаст ошибку компиляции 

     (2)

     (3)

     (4)


    Номер 2

    К операторам языка С++, которые нельзя перегружать, относят


    Ответ:

     (1) # 

     (2) [] 

     (3) * 


    Номер 3

    В чем ошибка при таком определении бинарного оператора: String operator+()?


    Ответ:

     (1) ошибки нет 

     (2) оператор сложения нельзя переопределять 

     (3) для бинарного оператора должен быть задан параметр 


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

    Какие из перечисленных ниже операторов не могут быть перегружены?


    Ответ:

     (1) :: 

     (2) || 

     (3) ^= 

     (4) ? 

     (5) ~ 


    Номер 2

    Какой из перечисленных ниже операторов не может быть перегружен?


    Ответ:

     (1) . 

     (2) | 

     (3) >> 


    Номер 3

    Какие операторы языка С++ нельзя перегружать?


    Ответ:

     (1) / 

     (2) :: 

     (3) + 


    Упражнение 9:
    Номер 1
    Сколько операндов может иметь операторная функция унарного оператора, объявленная как функция-член?

    Ответ:

     (1) 0 

     (2) 2 

     (3) 3 

     (4) любое количество 


    Номер 2

    Сколько операндов должна иметь операторная функция бинарного оператора, объявленная как глобальная функция?


    Ответ:

     (1) 0 

     (2) 1 

     (3) 2 

     (4) 3 


    Номер 3

    Сколько операндов должна иметь операторная функция бинарного оператора, объявленная как дружественная функция?


    Ответ:

     (1) 0 

     (2) 1 

     (3) 2 

     (4) 3 


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

    Что будет выведено на экран в результате выполнения приведенной ниже программы:

    #include "iostream.h" #include "conio.h" class NewClass { int x; int y; public: NewClass(int x0,int y0) { x=x0; y=y0; } void DISPLAY(void) { cout<<x<<" "<<y; } NewClass operator+(NewClass obj) { NewClass tmp(0,0); tmp.x=x+obj.x; tmp.y=y+obj.y; return tmp; } }; int main() { NewClass obj1(1,3),obj2(5,8); obj1=obj1+obj2; obj1.DISPLAY(); getch(); return 0; }

    Ответ:

     (1) 7,1 

     (2) 6 11 

     (3) 1,3 5,8 


    Номер 2

    Объявлен некоторый класс A. Функция объявляется внутри класса A. Выберите корректные варианты объявления функции перегрузки оператора.


    Ответ:

     (1) A operator+(A&a, A&b); 

     (2) A operator+(const A&a); 

     (3) A operator+(A a); 


    Номер 3

    Выберете корректные объявления

    1.class A{ friend A&operator+(A&a, A&b); }; A&operator+(A&a, A&b); 2.class A{ friend A&operator+(A&a, A&b); }; A&A::operator+(A&a, A&b);

    Ответ:

     (1) первое 

     (2) второе 

     (3) оба верны 


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

    Ответ:

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

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

     (3) надо перегружать операторы с помощью дружественных функций 


    Номер 2

    Каков синтаксис функций (или операторов) преобразования объекта одного типа в объект другого типа?


    Ответ:

     (1) operator <имя нового типа>(); 

     (2) <имя нового типа> operator ()

     (3) operator <имя нового типа>(<имя старого типа>); 


    Номер 3

    Выберите верные утверждения:


    Ответ:

     (1) функция преобразования не имеет параметров 

     (2) в функции преобразования не задается тип возвращаемого значения 

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


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

    Выберите верное утверждение:


    Ответ:

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

     (2) оператор индексирования должен быть объявлен как функция-член класса, которая принимает один аргумент 

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

     (4) функция operator[] возвращает объект 

     (5) функция operator[] возвращает ссылку на объект 


    Номер 2

    Выберите верное утверждение:


    Ответ:

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

     (2) оператор вызова функции должен быть объявлен как функция-член класса 

     (3) вызов функции представляет собой конструкцию операнд_1(операнд_2) 

     (4) первый операнд оператора вызова функции – это объект класса, в котором описан operator 

     (5) операция вызова функции позволяет пользователю определять число операндов 


    Номер 3

    Объявлен класс:

    class Point { int x,y,z; char *s; public: Point(int,int,int, char*); int GetX() { return x;} int GetY() { return y;} int GetZ() { return z;} Point* operator->() { return this;} }; Point::Point(int x1,int y1,int z1, char * s1) { x=x1; y=y1; z=z1; int n=strlen(s1); s=new char[n+1]; for(int i=0;i<=n;i++) s[i]=s1[i];} Какие из следующих операторов приведут к ошибкам компиляции?

    Ответ:

     (1) Point Pt(1,2,3,"MyPt"); 

     (2) cout<<Pt->GetX()<<'\t'<<Pt->GetY()<<'\t'<<Pt->GetZ()<<endl; 

     (3) cout<<Pt->x<<'\t'<<Pt->y<<'\t'<<Pt->z<<endl; 

     (4) cout<<Pt->s<<endl;  




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