虽然我已经在C++领域工作了一段时间,但是直到现在我还没有需要使用多态特性的必要,我对它们非常感兴趣。
如果我有一个基类ClassA
,另一个类ClassB
从它派生而来,我知道我可以在ClassA
中有一个virtual
成员函数,当在ClassB
中实现时,即使该实例使用ClassA
指针指向,也会在ClassB
实例中调用。没有这个virtual
关键字,我认为在使用基类指针时,基类的实现将占主导地位,但实际上操作的对象是从子类实例化的,如果ClassB
有自己的相同函数的实现,那么在这种情况下它会被忽略,这对我来说似乎是不合逻辑的。
这是正确理解多态行为的吗?
现在真正的问题是如何使用指向其基类的指针引用ClassB
。我只能想到两种方法:
- 在实例化时创建指向基类的指针,使用一个返回基类指针的函数,实际上为子类分配内存,使用子类的构造函数。(这样的创建函数有常用名称吗?)
- 使用
static_cast
将对象强制转换为基类指针,并将其赋值给指向基类的指针。
这是生成子类对象的基类指针的两种主要技术吗?