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

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

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

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


Ответ:

 (1) public 

 (2) private 

 (3) protected 


Номер 2

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

class A { public: int a; A() { a = 0; }; }; class B : public A { public: B():A() {}; }; class C : protected A { public: C():A() {}; }; class D : private A { public: D():A(){}; }; Созданы объекты и ссылки: B* b = new B; C* c = new C; D* d = new D; Какие из следующих операторов приведут к ошибкам компиляции?

Ответ:

 (1) A* p; 

 (2) b->a = 7; 

 (3) A* p = b; 

 (4) c->a = 7; 

 (5) A* p = (A*)c; 

 (6) d->a = 7; 

 (7) A* p = d; 


Номер 3

Если записано

class A { public: void f() { cout << 1; } }; class B : public A { public: void f() { cout << 2; } }; то что будет напечатано? B b; b.f();

Ответ:

 (1) 2 

 (2) 2 1 

 (3) 1 2 

 (4) 1 


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

Определите результат работы данной программы для A a; B b; b.f();

class A { public: void f() { cout << 5; } }; class B : public A { public: void f() { cout << 6; } };

Ответ:

 (1)

 (2)

 (3)

 (4) 11 


Номер 2

Верен ли данный код:

class A { public: void f() { cout << 5; } }; class B : public A { public: void f() { cout << 6; } };

Ответ:

 (1) да, верен 

 (2) нет, он содержит ошибку компиляции во второй строке 

 (3) такой код вызовет зацикливание 

 (4) код содержит синтаксическую ошибку в последней строке 


Номер 3

Если записано

class A { public: void f() { cout << 1; } }; class B : public A { public: void f() { cout << 2; } }; то что будет напечатано? B b; A& a=b; a.f();

Ответ:

 (1) 2 1 

 (2) 1 2 

 (3) 1 

 (4) ошибка 


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

Что обозначает запись class A { virtual f() = 0; };?


Ответ:

 (1) запись структурного класса 

 (2) запись абстрактного класса 

 (3) запись контекстного класса 

 (4) запись обобщенного класса 


Номер 3

В каком порядке вызываются конструкторы и деструкторы?

  • Конструктор базового класса
  • Деструктор базового класса
  • Конструктор производного класса
  • Деструктор производного класса

  • Ответ:

     (1) 1, 2, 3, 4 

     (2) 1, 3, 2, 4 

     (3) 3, 1, 2, 4 

     (4) 1, 3, 4, 2 

     (5) 3, 1, 4, 2 


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

    Имеется программный код:

    class A { public : int a, b; protected : int z; private : short i; } A1; class B : public A { private : int k; int func (float d); } B1; Выберите для него верные определения функции func: 1. int B::func(float d) { B1.i = b + a; return b; } 2. int B::func(float d) { k = this.b + a; return b; } 3. int B::func(float d) { B1.z = this->b + a; return b; }

    Ответ:

     (1) 1 

     (2) 2 

     (3) 3 


    Номер 3

    Что будет выведено на экран?

    class A { public: A() { x = 1; }; int f() { return x; }; protected: int x; }; class B { public: B() { x = 2; }; int f() { return x; }; protected: int x; }; class C : public A, public B { }; C* c = new C; cout << c->f(); delete c;

    Ответ:

     (1) 1 

     (2) 2 

     (3) ошибка компиляции 


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

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


    Ответ:

     (1) new, delete 

     (2) malloc, delete 

     (3) new, free 

     (4) malloc, free 


    Номер 2

    Какие библиотечные функции можно использовать для выделения и освобождения динамической памяти?


    Ответ:

     (1) new, delete 

     (2) malloc, delete 

     (3) new, free  

     (4) malloc, free  


    Номер 3
    Имеется запись (monstr - базовый класс, daemon - производный):
    
    // Описывается указатель на базовый класс:
    monstr *р:
    // Указатель ссылается на объект производного класса:
    р = new daemon:
    
    При выполнении виртуального метода p->draw(1, 1, 1, 1); будет вызван
    

    Ответ:

     (1) метод класса monstr 

     (2) метод класса daemon 

     (3) идентификатор класса monstr 


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

    Для чего нужны виртуальные базовые классы?


    Ответ:

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

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

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

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


    Номер 2

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

    class base { int x, y; public: int fun(); }; class derived: protected base { int z; public: int fun1(); }; Определите тип доступа из класса derived к членам x, y, fun класса base.

    Ответ:

     (1) x,y – недоступны, fun – protected 

     (2) x,y – private, fun - protected 

     (3) x,y, fun – protected 


    Номер 3

    Определены классы:

    class base { int x, y; public: int getx() { return x; } int gety() { return y; } }; class Derived : private base { int z; public: int getz() { return z; } base::getx; }obj; Какой из следующих операторов приведет к ошибкам компиляции?

    Ответ:

     (1) cout << obj.getx() << endl 

     (2) cout << obj.gety() << endl 

     (3) cout << obj.getz() << endl 


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

    Определены классы:

    class base { int x, y; public: base() { x = 0; y = 0; } int getx() { return x; } int gety() { return y; } }; class Derived : private base { int z; public: Derived() : base() { z = 0; } int getz() { return z; } base::getx; }; main() { Derived *obj = new Derived; /* ??????????? */ } Какие из следующих операторов приведут к ошибкам компиляции?

    Ответ:

     (1) cout << obj.getx() << endl; 

     (2) cout << obj->getx() << endl; 

     (3) cout << obj->gety() << endl; 


    Номер 2

    Определены классы:

    class base { int x, y; public: base() { x = 0; y = 0; } int getx() { return x; } int gety() { return y; } }; class Derived : protected base { int z; public: Derived() : base() { z = 0; } int getz() { return z; } base::gety; }; main() { Derived *obj = new Derived; /* ??????????? */ } Какие из следующих операторов приведут к ошибкам компиляции?

    Ответ:

     (1) cout << (*obj).gety() << endl; 

     (2) cout << obj->getx() << endl; 

     (3) cout << obj.getz() << endl; 


    Номер 3

    Выберите правильную синтаксическую конструкцию наследования:


    Ответ:

     (1) class имя_класса : список_базовых_классов { список_элементов класса} 

     (2) class имя_класса : : список_базовых_классов { список_элементов класса} 

     (3) class имя_класса ( список_базовых_классов ){ список_элементов класса} 

     (4) class имя_класса [ список_базовых_классов] { список_элементов класса} 


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

    Произойдет ли ошибка при компиляции этого кода?

    class Channel { public: void SetNumber (int n) { number = n;}; int GetNumber() const { return number;}; int number;}; int main() { private : int n;} Channel ch; {Channel ch; ch.number = 9; ch.SetNumber(10); Channel ch2(2);}

    Ответ:

     (1) нет, не произойдет 

     (2) да, произойдет, запись неверна 

     (3) произойдет при обнулении n 

     (4) произойдет при n=10 


    Номер 2

    Определены классы:

    class A { void fun() { cout << "функция класса A\n"; } }; class B : private A { public: void fun() { cout << "функция класса B\n";} }; class C : private B { public: void fun() { cout << "функция класса C\n";} }; Что будет напечатано в результате выполнения операторов: C *obj; obj = new C; obj->fun();

    Ответ:

     (1) функция класса С 

     (2) функция класса А 

     (3) функция класса В 


    Номер 3

    Определены классы:

    class A { public: void fun() { cout << "функция класса A\n"; } }; class B: public A { public: void fun() { cout << "функция класса B\n"; } }; class C: public B { public: void fun() { cout << "функция класса C\n"; } }; Что будет напечатано в результате выполнения операторов: C obj; obj.A::fun();

    Ответ:

     (1) функция класса С 

     (2) функция класса А 

     (3) функция класса В 


    Упражнение 9:
    Номер 1
    Что обозначает следующая запись?
    
    class Block<int, 100>{
    public:
    Вlоск() {р = new int [100];}
    ~Block {delete [ ] p;}
    operator int * ( );
    protected:
    int * p;
    };
    Block<int, 100>:: operator int *(){
    return р;
    }
    
    

    Ответ:

     (1) специализацию шаблона публичного класса для хранения 100 целых величин 

     (2) инициализацию целых переменных до 100 

     (3) обнуление сотого параметра класса 


    Номер 2

    Какие функции называются чисто виртуальными?


    Ответ:

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

     (2) виртуальные деструкторы 

     (3) виртуальные функции, не возвращающие никакого значения 

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

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


    Номер 3

    Что обозначает следующая запись?

    class В{ / * ... * / }; class С: public В{ /* ... */ }; С* с = new С; В* b = dynamic_cast<B*>(c);

    Ответ:

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

     (2) понижающее преобразование 

     (3) повышающее преобразование 

     (4) инициализацию класса 


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

    Дано определение классов:

    class MyClass0 { public: int x; //... }; class MyClass1 : MyClass0 { //... }; Какой статус доступа будет иметь компонент "x" класса "MyClass0" в производном классе "MyClass1"?

    Ответ:

     (1) public 

     (2) protected 

     (3) private 

     (4) ни один из представленных 


    Номер 3
    Выберите правильные утверждения относительно следующего кода:
    class hero{
    friend class mistress;
    }
    class mistress{
    void f1 ();
    void f2();
    }
    

    Ответ:

     (1) функция f1 является дружественной по отношению к классу hero 

     (2) функция f2 является дружественной по отношению к классу hero 

     (3) функция f1 не является дружественной по отношению к классу hero 

     (4) функция f2 не является дружественной по отношению к классу hero 


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

    Можно ли осуществить явное преобразование типа объекта к типу абстрактного класса?


    Ответ:

     (1) можно 

     (2) можно при определенных условиях 

     (3) нельзя 


    Номер 2

    Каков будет результат , если конструктор абстрактного класса вызовет чисто виртуальную функцию?


    Ответ:

     (1) ошибка на этапе компиляции 

     (2) ошибка на этапе связывания 

     (3) результат непредсказуем 


    Номер 3

    Может ли конструктор быть виртуальным?


    Ответ:

     (1) может 

     (2) может при определенных условиях 

     (3) не может 


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

    Можно ли создать виртуальную функцию, имитирующую виртуальный конструктор?


    Ответ:

     (1) можно 

     (2) можно при определенных условиях 

     (3) нельзя 


    Номер 2
    Можно  ли  использовать виртуальную функцию, имитирующую виртуальный конструктор, для размножения объектов?

    Ответ:

     (1) можно 

     (2) можно при определенных условиях 

     (3) нельзя 


    Номер 3

    Что будет напечатано в результате работы программы:

    class A { public: A() { cout << "A "; }; virtual A* new_A() { return new A(); } }; class B : public A { public: B(){ cout << "B " ;}; A* new_A() { return new B(); } }; void fun(A* p1, A* p2) { A* p3 = p1->new_A(); A* p4 = p2->new_A(); } void main() { A* p1 = new A; B* p2 = new B; fun(p1,p2); }

    Ответ:

     (1) A A B A A B 

     (2) A В B A В B 

     (3) А А А В В В 




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