Механизм работы наследования с++
У меня вопрос про механизм работы наследования. Когда мы наследуем классы, друг от друга, то один класс получает доступ к членам другого класса, но это очень упрощенно. Меня интересует более точное определение происходящего при наследовании. Сейчас поясню, что натолкнуло меня на эту мысль. Есть 2 класса:
class Parent
{
};
class Child : public Parent
{
public:
void say()
{
cout << "I am child";
}
};
Теперь, самое главное, что меня интересует:
int main()
{
Parent variable = Child();
}
Почему работает данная запись и все прекрасно компилируется? Теперь другой момент, если я попытаюсь сделать вот-так:
variable.say();
То у меня ничего не получится, хотя казалось бы, в variable лежит объект класса Child, а Child в свою очередь имеет метод say, но вызвать я его не могу, как так? Объясните пожалуйста, что происходит при наследовании одного класса от другого, явно в класс наследник не просто копируются члены класса-родителя, а это происходит как-то по другому, как?
Ответы (1 шт):
Как бы это выразиться...
Parent variable = Child();
скопируется только та часть Childа, которая соответствует Parent. Почему компилируется? Ну, поскольку Child является одновременно Parent... :)
Объект variable - это просто объект типа Parent, со всеми вытекающими последствиями.
Заметим, что вы не сможете также сделать
Parent * variable = new Child;
variable->say();
по той же самой причине - variable - это указатель на Parent, а никакого say() у Parent нет. Ни обычного, ни вирптуального.