Результаты прохождения теста C++ основы пользователем Валерий_Жбанов

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

+113

Что выведет следующая программа:
#include <iostream> 
#include <cstdio> 
 
int main() { 
   std::cout << printf("boom!"); 
 
   return 0; 
} 
Ваши ответы
Нет правильного ответа
Объяснение:

должно быть выведено "boom!5", т.к. printf() возвращает int, равный количеству символов, выведенных в stdout (см. http://www.cplusplus.com/reference/clibrary/cstdio/printf/ ). std::cout по умолчанию синхронизирован с stdout, поэтому вначале в stdout попадет "boom!", а затем - "5" (см. http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/ ).

Что из перечисленного верно по отношению к ссылкам и указателям?
Ваши ответы
В отличие от указателей, ссылки нельзя изменять и обязательно необходимо инициализировать при определении или в списке инициализации конструктора.
Влияют ли не виртуальные методы класса на размер объекта?
Ваши ответы
Нет
Объяснение:

Под них не
выделяется память

Что будет выведено на консоль в результате работы программы?
#include <iostream> 
using namespace std; 
 
class A { 
public: 
   A() { cout << "Hello "; } 
   ~A() { cout << "World!"; } 
} a; 
 
int main() {} 
Ваши ответы
"Hello World!"
Что выведет cout?
#include <iostream> 
 
using namespace std; 
 
int &test() { 
   static int a = 3; 
   return a; 
} 
 
int main() { 
   ++++++test(); 
 
   cout << test() << endl; 
   return 0; 
}
Ваши ответы
6
Объяснение:

int & является lvalue.

Что выведет cout?
#include <iostream> 
 
using namespace std; 
 
const int &test() { 
   static int a = 3; 
   return a; 
} 
 
int main() { 
   test()++; 
   test()++; 
   cout << test() << endl; 
   return 0; 
}
Ваши ответы
Не скомпилируется
Объяснение:

Не скомпилируется, так как test() возвращает ссылку на целочисленную константу, к которой нельзя применять опрератор инкремента.

Что напечатает программа?
#include <cstdlib> 
   #include <iostream> 
 
   struct A  { 
     virtual ~A() {} 
     virtual void foo() const { std::cout << "A::foo()" << std::endl; } 
     virtual void bar() const { std::cout << "A::bar()" << std::endl; } 
     void baz() const { std::cout << "A::baz()" << std::endl; } 
   }; 
 
   struct B : public A  { 
     virtual void foo() const { std::cout << "B::foo()" << std::endl; } 
     void bar() const { std::cout << "B::bar()" << std::endl; } 
     void baz() const { std::cout << "B::baz()" << std::endl; } 
   }; 
 
   int main() { 
     A * pA = new B; // 1 
     pA->foo(); 
     pA->bar(); 
     pA->baz(); 
     delete pA; 
     return 0; 
   } 
Ваши ответы
B::foo() B::bar() A::baz()
Максимальное значение переменной типа int (4 байта):
Ваши ответы
2^31 - 1
Имеется код, модифицирующий элементы списка. Что будет выведено на консоль?
#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; 
}
Ваши ответы
a b c d
Какая проблема в данной программе?
#include <iostream> 
#include <cstring> 
 
char * CutString(const char * str1) 
{ 
   char str2[4];  
   strncpy(str2, str1, 3);  
   str2[3] = '\0';    //1  
   return str2;   
} 
 
int main() 
{ 
     char * s = CutString("aaaaaaa"); 
     std::cout<<(s); 
} 
Ваши ответы
Неопределенное поведение, так как str2 не будет существовать на момент cout
Объяснение:

После выхода из функции str2 перестает существовать, потому cout ее не выведет.

(i) 'ios' является базовым классом 'istream' (ii) Все файлы классифицируются только в 2 типа. (1) Текстовые файлы (2) Двоичные файлы.
Ваши ответы
И (i) & (ii) верны
Каков результат работы следующей программы?
#include<iostream>
 
using namespace std;
 
main() {
    union abc {
        int x;
        char ch;
    } var;
 
    var.ch = 'A';
    cout << var.x;
}
Ваши ответы
65
Удаленные функции (С++ 11) Что будет выведено на экран?
#include <iostream> 
using namespace std; 
 
void func( int number)  
{ 
   cout << "hello" << endl; 
} 
 
void func(char number) = delete; 
void func(double number) = delete; 
 
 
int main() 
{ 
   func( 4); 
   func( 'c'); 
   func( true); 
   func( 3.14); 
 
   return 0; 
}
Ваши ответы
hello
hello
Что выведет программа:
#include <iostream> 
 
class A 
{ 
   public: 
   A() { std::cout << "A()"; } 
 
   A(const A& a){ std::cout << "copyA()"; } 
 
   A& operator=(const A& a) 
   { 
       std::cout << "=()"; 
   } 
}; 
 
int main() 
{ 
   A a1; 
   A a2 = a1; 
} 
Ваши ответы
A()A()=()
Объяснение:

Программа выведет: A()copyA() Copy constructor is called when a new object is created from an existing object, as a copy of the existing object. And assignment operator is called when an already initialized object is assigned a new value from another existing object. a2 = a1; // calls assignment operator, same as "a2.operator=(a1);" A a3 = a1; // calls copy constructor, same as "A a3(a1);"

Что выведет программа (скомпилированная с поддержкой C++11)?
#include <iostream> 
 
class A 
{ 
   int m_var; 
 
public:     
   A() : m_var( 0 ) {}     
   int const & getVarRef() const { return m_var; }     
   int * getVarPtr() { return &m_var; }     
}; 
 
int main() 
{ 
   A obj;     
   { 
       auto var = obj.getVarRef(); 
       var += 10; 
   }     
   std::cout << obj.getVarRef();     
 
   { 
       auto var = obj.getVarPtr(); 
       *var += 10; 
   }     
   std::cout << obj.getVarRef(); 
 
   return 0; 
} 
Ваши ответы
1010
Объяснение:

При использовании спецификатора auto и присвоении ему ссылочных типов - auto конвертируется только в тип на который указывает ссылка без сохранения константности и ссылки. При присвоении указателя на типа, auto конвертируется в такой же указатель( константность так же сохраняется, если была указана ).