1. Какие есть 3 базовых принципа ООП? 2. Какие виды полиморфизма существуют в C ++? 3. Нарисуйте диаграмму наследования классов «Фигура», «Окружность», «Квадрат», «Прямоугольник» 4. Что такое ромбовидное наследование? Какие возникают проблемы и как их решать? 5. Что выведет на экран следующий код? template <int a> void f() { std::cout << a; } void g() { for (int i = 0; i < 5; i++) f<i>(); } 1. Может ли быть конструктор виртуальным? Может ли быть деструктор виртуальным? 2. Зачем нужен виртуальный деструктор ? 3. Что такое чисто-виртуальная функция? 4. Будет ли компилироваться следующий код? Что мы получим в результате? class CClass { public: CClass() {} virtual ~CClass() = 0 { DoSomeStuff(); } }; 1. В чем отличие стабильной сортировки от обычной? (Другими словами, в чем отличие std :: stable _ sort от std :: sort ) 2. Что такое смарт-пойнтер ? 3. Что вы используете из STL ? (Если человек не использует алгоритмы, то спросить почему.) 4. Реализуйте функцию переворота строки 5. Реализуйте функцию strcpy из стандартной библиотеки С 6. Какое значение будет у ptr после выполнения следующего кода? int *ptr = (int*)0x01; ptr++; 1. Какое значение будет у var (6)? int var = 0xfe & 3 << 1; 1. Какой вариант объявления указателя на функцию правилен? typedef void (*func_ptr)(void); typedef void (*)func_ptr(void); typedef void func_ptr()(void); 1. Где содержится ошибка(ки) в следующем коде? class B { int a; public: int b; protected: int c; private: int d; }; class D: public B { int fa() {return a;} int fb() {return b;} int fc() {return c;} int fd() {return d;} } 1. Что выведет следующий код? class B{ public: virtual void prn() {cout << "B";} }; class D : public B{ public: virtual void prn() {cout << "D";} }; void f(B b) { b.prn(); } Void g(B &b) { b.prn(); } int main() { B* pB = new D; pB->prn(); f(*pB); g(*pB); 1. Что такое срез класса (таблицы виртуальных функций)? 2. Что выведет следующий код? class B { public: B(char c) { cout << c;} }; class D { public : B bB, bA, bC; D(void) : bA(‘a’), bB(‘b’), bC(‘c’) {} }; int main() { D d; } 1. Какое значение будет у переменной value ? int foo(int value) { return value++; } void main() { int value = foo(100); } 1. Чему будет равно значение переменной j после выполнения следующего кода? int data[2] = {0,1}; int *i = &data[0]; int j = *i++; 1. Взаимозаменяемы ли шаблоны и виртуальные функции? Можно ли одно эмулировать другим? 2. Что выведется в результате выполнения этого кода? void f() { std::cout << "a"; try { std::cout << "b"; try { std::cout << "c"; throw 1; } catch (char) { std::cout << "d"; throw; } catch (...) { std::cout << "e"; throw; } catch (int i) { std::cout << "f"; throw (i + 1); } } catch (unsigned int i) { std::cout << i; } catch (int i) { std::cout << i; } } void main() { f(); } 1. Что выведет следующий код ? #include <iostream> void F1(); void F2(); class Base { public: Base() {} }; class Derived : public Base { public: Derived() {} }; int main() { F1(); return 0; } void F1() { try { F2(); } catch(Derived) { std::cout << "F1() } catch(Base) { std::cout << "F1() } catch(...) { std::cout << "F1() } } void F2() { try { throw Derived(); } catch(Base) { std::cout << "F2() throw; } catch(...) { std::cout << "F2() throw; } } : Derived\n"; : Base\n"; : ...\n"; : Base\n"; : ...\n"; 1. Будет ли компилироваться следующий код? Если да, то в каких случаях. Если нет, то почему ? template <typename T> struct Type2Type{ typedef T AnotherType; }; template <typename T> class A { T::AnotherType var; A() { var = 0; } }; template <typename T> void f(T v) { A<Type2Type<T>> a; } int main() { f(1); }