在派生类中调用多个虚函数

Calling multiple virtual functions in a derived class

本文关键字:函数 调用 派生      更新时间:2023-10-16

我正在为2D游戏引擎创建场景图。我创建了一个名为 Node 的基类,它由 Sprite 派生,而 Sprite 又由 Player 派生。每个类都有虚函数update()。我想给每个班级的每个update()打电话。我不知道这是否可能(除了使用base::update(),但对于许多派生类来说,这有点混乱(。

下面的代码提供了对项目当前结构的一些见解。

#include <iostream>
class Base
{
public:
virtual void print()
{
std::cout << "Hello from Base ";
}
};
class Derived : public Base
{
public:
virtual void print()
{
std::cout << "and Derived!" << std::endl;
}
};
int main()
{
Derived foo = Derived();
foo.print(); // Obviously outputs only "and Derived!"
}

虽然上述内容完全符合预期,但我想要的输出实际上是"你好,来自基地和派生!

我知道我可以把Base::print()放在Derived::print()的顶部,但我正在寻找一种更干净的方法,将许多派生类放在彼此之上。 我对C++语言有点陌生,我找不到有关此主题的信息。如果不是适当的多态风格,我愿意完全改变我的方法。我宁愿把事情做对,也不愿为了得到这种影响而搞砸它。

我知道

我可以把Base::print()放在Derived::print()的顶部,但我正在寻找一种更干净的方法,其中有许多派生类相互叠加。

如果你想要它,你必须明确地这样做,这就是用多态性覆盖的重点。

class Derived : public Base
{
public:
virtual void print()
{
Base::print();
std::cout << "and Derived!" << std::endl;
}
};

当你提到图形(树状结构(时,你应该看看访客模式

有时C++会做一些你意想不到的事情。

我的建议是使用它必须支持的 C 语言的一个功能。

在这种情况下,我使用union来实现您正在寻找的程序化效果:

#include <iostream>
class Base
{
public:
virtual void print()
{
std::cout << "Hello from Base ";
}
};
class Derived : public Base
{
public:
virtual void print()
{
std::cout << "and Derived!" << std::endl;
}
};
int main(void);
int main()
{
Base foo;
Derived bar;
union foobar {Base *b; Derived *d;} fb;
fb.b = &foo; fb.b->print();
fb.d = &bar; fb.d->print();
return 0;
}

代码链接:http://ideone.com/JdU8T6