Введение в тест по ООП в C++
Тест ООП в C++ посвящен объектно ориентированному программированию в C++.
В тесте рассматриваются вопросы ООП, которые должны знать программисты на C++ различной квалификации. Большинство вопросов практические и содержат фрагменты исходного кода.
Перед прохождением теста настоятельно рекомендуется пройти тест по основам C++. Желательно также познакомиться с тестом C++ среднего уровня.
Статья, которая касается вопроса жизненного цикла объекта в C++ - Scope guard в C++ (boost shared_ptr).
Структура теста ООП в C++
Вопросы теста ООП можно разделить на следующие группы:
- Жизненный цикл объектов (life cycle). Создание и уничтожение объектов. Конструкторы и деструкторы.
- Инкапсуляция и друзья класса (friend)
- Наследование (inheritance) и множественное наследование в C++
- Полиморфизм (polymorphism)
- Виртуальные (virtual) функции и методы
Дальнейшее развитие теста ООП в C++
Тест ООП в C++ содержит сравнительно небольшое количество вопросов. Именно поэтому в ближайшие планы команды Quizful входит пополнение пула вопросов данного теста.
Так как тест ООП в Си++ покрывает достаточно широкую тематику, планируется явно разбить вопросы теста ООП на разделы.
Если у Вас есть желание пополнить тест своими вопросами, присылайте их нам или же добавляйте через специальную форму на странице с результатами теста сразу после его прохождения.
Ждем Ваших комментариев по поводу вопросов теста.
class A {
A() {cout << "A";}
~A() {cout << "~A";}
};
class B {
B() {cout << "B";}
~B() {cout << "~B";}
};
class C: public A {
B m_b;
C() {cout << "C";}
~C() {cout << "~C";}
};
void Test() {
C c;
}
Будет - ABC~C~B, а вот ~A вызван не будет, так как это не виртуальный деструктор.
http://habrahabr.ru/blogs/cpp/64280/
http://www.kalinin.ru/programming/cpp/28_07_00.shtml Виртуальные деструкторы
Хотя эта ошибка проявляется только для объектов в динамической памяти и если указатель на объект приведен к базовому типу класса.
Там в стеке создается объект класса C и не приводится к базовому классу. Поэтому для него не страшно, что не задан атрибут virtual для деструктора и память в нем не выделяется.
class A
{
const int a=5;//Хм, это не C#. Ошибка, нужно static const int a=5;
};
В будущем, дабы не тратить впустую время, претензии к отдельным вопросам буду рассматривать только если комментарий оставлен к вопросу.
class Abstract {
public:
virtual void pureVirtual() = 0 {
// реализация
}
};
И как Ваша оценка связи вопросов, которые выносятся на экзамен с их реальным применением? В мое время это была сплошная терминология, причем какой-то жуткий "суржик". Сдал на "отлично" и заменил нормальными знаниями в ходе следующих 5 лет работы. Очень надеюсь, что сейчас окажусь неправ.