- •Int main () {
- •Int main () {
- •Int main () {
- •Int main (){
- •Int main () {
- •Int main () {
- •Int main () {
- •Int main () {
- •Int main () {
- •Int main () {
- •Итоговый тест №8.
- •Int main () {
- •Int main() {
- •Int main () {
- •Int main() {
- •Int main () {
- •Int main() {
- •Int main () {
- •Int main() {
- •Итоговый тест№9 Перегрузку операций.
- •Int main () {
- •Int main() {
- •Int main () {
- •Int main()
Итоговый тест 11.
Задание №1
Для каждой из следующих программ определите результат выполнения. Дайте его объяснение. Если программа не скомпилируется, то объясните почему. Запускать код не нужно, вы должны определить результат/ошибки программ без помощи компилятора.
a)
include <iostream>
class Parent {
public:
Parent () {
std::cout << "Parent()\n";
}
~Parent () {
std::cout << "~Parent()\n";
}
};
class Child: public Parent{
public:
Child () {
std::cout << "Child()\n";
}
~Child () {
std::cout << "~Child()\n";
}
};
int main () {
Child ch; }
Ответ:
Потому что сначала создается объект в родительском классе, потом создается объект в классе ребенка. После чего в обратном порядке созданные объекты уничтожатся.
b)
#include <iostream>
class Parent{
public:
Parent (){
std::cout << "Parent()\n";
}
~Parent () {
std::cout << "~Parent()\n";
}
};
class Child: public Parent {
public:
Child () {
std::cout << "Child()\n";
}
~Child () {
std::cout << "~Child()\n";
}
};
Int main () {
Child ch;
Parent p;
}
Ответ:
Так как сначала вызывает объект класса ребенка, то создается объект родительского класса, после чего объект класса ребенка. Затем мы просто вызываем родительский класс. После чего в обратном порядке созданные объекты будут уничтожены.
c) #include <iostream>
class Parent {
private:
int m_x;
public:
Parent (int x): m_x(x) {
std::cout << "Parent()\n";
}
~Parent () {
std::cout << "~Parent()\n";
}
void print () {std::cout << "Parent: " << m_x << '\n'; }
};
class Child: public Parent{
public:
Child (int y): Parent (y) {
std::cout << "Child()\n";
}
~Child () {
std::cout << "~Child()\n";
}
void print () { std::cout << "Child: " << m_x << '\n'; }
};
Int main () {
Child ch (7);
ch.print ();
}
Ответ: программа не сработает, так как переменная m_x находится в приватной области, и класс ребенок не имеет доступа к этой закрытой области родительского класса.
d)
#include <iostream>
class Parent {
protected:
int m_x;
public:
Parent (int x): m_x(x) {
std::cout << "Parent()\n";
}
~Parent () {
std::cout << "~Parent()\n";
}
void print() { std::cout << "Parent: " << m_x << '\n'; }
};
class Child: public Parent
{
public:
Child (int y): Parent(y) {
std::cout << "Child()\n";
}
~Child () {
std::cout << "~Child()\n";
}
void print () { std::cout << "Child: " << m_x << '\n'; }
};
Int main () {
Child ch(7);
ch.print();
}
Ответ:
Класс ребенок будет иметь доступ к переменной m_x, так как открытые и защищенные члены базового класса под ключевым словом protected являются защищенными членами производных классов. После чего в обратном порядке созданные объекты будут уничтожены.
e)
#include <iostream>
class Parent {
protected:
int m_x;
public:
Parent (int x): m_x(x) {
std::cout << "Parent()\n";
}
~Parent () {
std::cout << "~Parent()\n";
}
void print () {std::cout << "Parent: " << m_x << '\n'; }
};
class Child: public Parent {
public:
Child (int y): Parent(y)
{
std::cout << "Child()\n";
}
~Child () {
std::cout << "~Child()\n";
}
void print () { std::cout << "Child: " << m_x << '\n'; }
};
class D2: public Child {
public:
D2(int z): Child(z) {
std::cout << "D2()\n";
}
~D2() {
std::cout << "~D2()\n";
}
// Обратите внимание, здесь нет метода print()
};
Int main (){
D2 d (7);
d.print ();
}
Ответ:
Сначала мы создаем объект в классе D2. Для этого нужно сначала нужно создать объекты в классах Child и Parent. Так как в классе D2 нет своего метода вывода, используется метод родительского класса Child. После чего в обратном порядке созданные объекты будут уничтожены.
Итоговый тест 12.
Задание №1
Каждая из следующих программ имеет какую-то ошибку. Ваша задача состоит в том, чтобы найти эту ошибку визуально (не запуская код).
Предполагаемый вывод каждой программы:
Child
a)
#include <iostream>
class Parent {
protected:
int m_value;
public:
Parent (int value): m_value(value) {}
const char* getName () const {return "Parent";}
};
class Child: public Parent {
public:
Child (int value): Parent(value) {}
const char* getName () const {return "Child";}
};
