【发布时间】:2015-07-27 15:02:17
【问题描述】:
假设我们有两个类 Employee 和 Manager,其中 Manager 派生自 Employee。 e2和e3有什么区别(除了一个是指针)
Manager m;
Employee e2 = m;
Employee* e3 = &m;
我注意到,如果 Manager 覆盖了 Employee 中的虚拟方法 print,那么 e2.print() 会调用 Employee::print 而 e3->print() 会调用 Manager::print()(即,如果没有指针)。但我不确定这里到底发生了什么。
【问题讨论】:
-
如果 Manager 是从 Employee 派生的,如果 Employee 不是抽象的,你的类设计就会被破坏。多态层次结构中的非叶类应该是抽象的。
-
也许读到这个:What is Object Slicing?。你的
e2只是他以前的自我的一部分(字面意思)。 -
两者都不是“铸造方法”。
-
我不相信这是 274626 的副本。这个问题问,“什么是对象切片”。这个问题询问了两种语法结构之间的区别(其中一种导致对象切片,但这在问题中并不明确)。
标签: c++ pointers inheritance polymorphism