在派生类中调用多个虚函数
Calling multiple virtual functions in a derived class
我正在为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
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 返回指向对象的指针的函数调用是否为 prvalue?
- C++ 如何重载 [] 运算符并进行函数调用
- 代码的效率. 转到和函数调用
- 是同一作用域的函数部分中的函数调用
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 类型擦除的std::function与虚拟函数调用的开销