Разминка для мозгов: занимательный полиморфизм

Имеется программа:

#include <iostream>

class Foo {
public:
    int x;
    virtual void print();
};

class Bar : public Foo {
public:
    int y;
    virtual void print();
};

void Foo::print() {
    std::cout << "x: " << this->x << '\n';
}

void Bar::print() {
    std::cout << "x: " << this->x << " y: " << this->y << '\n';
}

void print(Foo foo) {
    foo.print();
}

void print2(Foo &foo) {
    foo.print();
}

void print3(Foo *foo) {
    foo->print();
}

int main() {
    Bar bar;
    bar.x = 5;
    bar.y = 10;

    print(bar);
    print2(bar);
    print3(&bar);
}

Задание 1. Не запуская программу напишите, что программа должна выдать на экран.

Задание 2. Откомпилируйте и запустите программу. Объясните полученные результаты.

PS. Автор кода А. Александреску.

Эмммм, я так понимаю, это «для самых маленьких»?
Ок. Тогда промолчу :)

Первый ответ: х:5
x:5 y:10
x:5 y:10
Второй ответ: Такой ответ будет из-за того что в конце указан код}

int main() {
    Bar bar;
    bar.x = 5;
    bar.y = 10;

    print(bar);
    print2(bar);
    print3(&bar);
}

Андрей, по второму заданию объяснение не принимается. «Почему море синее?» — «Потому что это море».

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.