Результаты прохождения теста C++ основы пользователем Lucifer Morn

Результат прохождения теста "C++ основы" - Не пройден

+24

  • Кто проходил: Lucifer Morn
  • Дата прохождения: 11.02.2019
Что выведет эта программа?
#include <iostream> 
 
int main() { 
   char src[] = "Hello, world"; 
   char dst[ sizeof src ]; 
 
   const char * psrc = src; 
   char * pdst = dst; 
 
   while( *pdst++ = *psrc++ ); 
   std::cout << dst << std::endl; 
   return 0; 
} 
Ваши ответы
Hello, world
Объяснение:

Интерес здесь представляет строка while( *pdst++ = *psrc++ );
Что в ней происходит?
Сначала выполняется постфиксный инкремент на указателях, возвращая их копии. Потом происходит разыменование и присвоение значения символа источника символу приемника.
А затем (важно, условие окончание цикла!) результат - значение символа - проверяется на 0 (нуль-терминатор в конце строки).
Итого: этот код - замысловатая (для новичка, конечно) запись копирования строки.

Какие операторы цикла отсутствуют в C++?
Ваши ответы
repeat until
Что произойдёт при попытке сборки и запуска проекта в котором только один файл со следующим исходным кодом(source.cpp)?
#include <iostream> 
 
int foo(int); 
 
int main() 
{ 
   std::cout << foo(5); 
 
   return 0; 
}
Ваши ответы
Ошибка линковки
Объяснение:

Для корректной компиляции достаточно, чтобы функция была объявлена раньше, чем вызывается. Результатом компиляции будет файл source.obj
Но при попытке слинковать проект obj-файл с определением функции foo() не будет найден, поэтому возникнет ошибка линковки

Результат работы программы?
#include <iostream>  
using namespace std; 
 
class A { 
public: 
   int a; 
   int getB() { 
       return B::b; 
   } 
   class B { 
       public: 
           B() { 
               b = 1; 
           } 
           int b; 
   }; 
}; 
 
int main()  
{ 
   A a; 
   cout << a.getB(); 
   return 0; 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Доступ к полям вложенного класса осуществляется только через объект этого класса

Что будет выведено в результате выполнения:
#include <iostream> 
using namespace std; 
 
struct A 
{ 
   void func(float val) 
   { 
       cout << "A::func "; 
   } 
}; 
 
struct B: A 
{ 
   void func(int val) 
   { 
       cout << "B::func "; 
   } 
}; 
 
int main() 
{ 
   B b; 
   b.func(10); 
   b.func(10.5); 
 
   static_cast<A*>(&b)->func(10); 
   static_cast<A*>(&b)->func(10.5); 
 
   cout << endl; 
} 
Ваши ответы
Ошибка при компиляции
Объяснение:

Наличие более подходящей доступной функции в базовом классе не имеет значения, потому что компилятор, обнаружив функцию во внутренней области видимости, не продолжает поиск имени во внешних областях видимости. Имя из внутренней области видимости скрывает такое же имя во внешней области.

Какие ошибки есть в коде?
#include <iostream> 
 
class A 
{ 
public: 
 virtual ~A() = 0; 
}; 
 
A::~A() 
{ 
} 
 
class B: public A 
{ 
}; 
 
int main() 
{ 
 A* a = new B; 
 delete a; 
 
 return 0; 
}
Ваши ответы
Ошибка компоновщика
Объяснение:

Чисто виртуальный деструктор, как и чисто виртуальная функция могут иметь реализацию. При удалении объекта, будет вызван деструктор.

Каков результат работы следующей программы?
#include<iostream>
 
using namespace std;
 
main() {
    int const a = 5;
    a++;
    cout << a;
}
Ваши ответы
5
Какой будет результат работы программы?
#include <iostream> 
using std::cout; 
 
struct Base { 
   static int num; 
   static const int val=2; 
 
   static void foo() { 
       static int num2=++test();        // 1 
       cout << num2; 
       test() += val;                   // 2 
   } 
   static int& test() { 
       return num; 
   } 
}; 
int Base::num; 
int main() 
{     
   for (int i = 0;i < Base::val;i++) { 
       Base::foo(); 
   } 
   cout << Base::num; 
 
       return 0; 
}
Имеется код, модифицирующий элементы списка. Что будет выведено на консоль?
#include <list> 
#include <iostream> 
 
using namespace std; 
 
int main() 
{ 
   list<char> coll {'a', 'b', 'c', 'd'};       
 
   for (auto  elem : coll)        
       elem += 4;     
 
   for (auto elem : coll) 
       cout << elem << ' '; 
 
   cout << endl; 
   return 0; 
}
Определите верную запись значения 23,45 умноженное на 10 в 10-ой степени.
Какие вы видите ошибки в этом коде?
class A { 
   public: 
       A(int x) : _x(x) {} //1 
   private: 
       int _x; 
}; 
 
int main() {  
   A a = 10; //2 
   A b(a);    
 
   return 0;  
} 
Каким будет результат выполнения кода?
int buffer[512]; 
struct A 
{ 
   int i; 
   float f; 
   A()  { cout << "A()" << endl;} 
   ~A() { cout << "~A()" << endl; } 
 
}; 
 
int main() 
{ 
   A* p = new (buffer) A();               // 1 
   A* p2 = new (buffer+ sizeof(A)) A();   // 2 
 
   delete p2;                             // 3 
   delete p;                              // 4 
}
Компилируется ли следующий код?
#include <iostream>  
using namespace std;  
 
class A  
{  
protected:  
   virtual void f() = 0;  
};  
 
void A::f()                   //1  
{cout << "A";}  
 
class B : public A  
{  
public:  
   void f()  
   {A::f();}                 //2  
};  
 
int main()  
{  
   B b;  
   void(B::*ptr)() = &B::f;  //3  
   (b.*ptr)();               //4  
}
Что будет выведено на экран?
class IClass { 
public: 
   void Print() {}; 
}; 
class Class1:public IClass { 
public: 
   void Print() { std::cout << 1; }; 
}; 
class Class2 :public IClass { 
public: 
   void Print() { std::cout << 2; }; 
}; 
class Class3 :public IClass { 
public: 
   void Print() { std::cout << 3; }; 
}; 
void Print(IClass* c) { 
   c->Print(); 
} 
int main() { 
   Print(new Class1()); 
   Print(new Class2()); 
   Print(new Class3()); 
   return 0; 
}
Что из приведённых вариантов является минимальной программой на C++?