b.hello()
печатает "x", потому что b
является экземпляром класса X. c->hello()
печатает "y", потому что c
указывает на a
, а a
является экземпляром класса Y.
Что может сбить вас с толку, так это то, что когда вы пишете x b = a;
, вы создаете новый объект b
и инициализируете его с помощью a
. Когда вы пишете x* c = &a;
, c
не является новым объектом. Вы только что ввели псевдоним для существующего объекта.