Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кдз / кдз программирование черновик.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
64.23 Кб
Скачать

Итоговый тест 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";}

};

Соседние файлы в папке кдз