未调用派生类函数
Derived Class Function Not Called
我遇到一个问题,当从基类指针调用派生类时,它没有自己版本的函数。为了更好地解释类别定义如下
Class Foo
{
public:
Foo();
virtual ~Foo();
virtual void Event();
}
//-----------------------
Class FooBar : public Foo
{
public:
FooBar();
virtual void Update() = 0;
virtual void Draw() = 0;
}
//-----------------------
Class FinalFoo : public FooBar
{
public:
FinalFoo();
void Update();
void Draw();
void Event();
}
还有其他类似于FinalFoo
的类。因此,我尝试在指向Foo
对象的指针上调用Event
,期望它会调用派生实现。然而,它似乎调用了基类版本,这就是
FinalFoo* myThing = new FinalFoo();
Foo* baseThing = myThing;
baseThing->Event(); // I expected this to call FinalFoo::Event()
假设上面的代码被更正,它实际上调用了FinalFoo::Event()
。下面是一个完整且可编译的示例。请注意,它还在战略要点中添加了关键字override
:我敢打赌,在原始代码中也添加override
(以及使用知道该关键字的编译器进行编译)会指出您的覆盖不是一个。
#include <iostream>
class Foo
{
public:
virtual ~Foo() {}
virtual void Event() { std::cout << "Foo::Event()n"; }
};
//-----------------------
class FooBar : public Foo
{
public:
virtual void Update() = 0;
};
//-----------------------
class FinalFoo : public FooBar
{
public:
FinalFoo() {}
void Update() override { std::cout << "FinalFoo::Update()n"; }
void Event() override { std::cout << "FinalFoo::Event()n"; }
};
int main()
{
FinalFoo myThing;
Foo* baseThing = &myThing;
baseThing->Event();
}
相关文章:
- 如何通过派生类函数更改基类中的向量
- 虚拟基类函数中派生类的大小
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何使派生类函数在调用时始终调用相同的基类函数?
- 有没有办法在没有虚拟的情况下使用基类指针调用派生类函数
- 如何从派生类函数中调用虚拟函数
- C++虚拟函数:基类函数是调用的,而不是派生的
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- C++通过 const 引用传递时不调用派生类函数
- 有没有办法调用基类函数,该函数在使用私有继承的派生类中被覆盖?
- 是否可以在引用另一个派生类的派生类中声明复制构造函数?
- 如何从包含基类指针的容器中调用派生类函数(基于其类型)?
- 从多重继承中的派生类函数调用适当的父类函数
- 从具有泛型返回类型的 crtp 基类调用派生类中的函数
- 使用单一实例类作为派生类时,如何访问基类中的函数
- 无法访问派生类函数内的基类的受保护数据成员
- 调用不属于基类的派生类函数的最佳方法是什么?
- 将 final 关键字添加到没有基类(未派生)的类中的虚函数是否有意义
- 从派生类对象调用基类函数.派生类构造函数中设置的基类数据成员