【发布时间】:2015-03-12 20:35:37
【问题描述】:
我正在尝试构建一个带有父类的软件,该父类调用派生类函数而不知道派生类本身。我一直在考虑它,但没有找到真正的解决方案。我想我应该从派生类中获取一个指针,以便使用父类执行代码。
这是我想要实现的目标:
我有一个带有纯虚函数的父类。派生类将实现所述功能。父类也将有一个静态函数,其中(使用向量)将执行派生类函数的代码。
class Base {
static std::vector<Base*> vec;
public:
virtual void Test() = 0;
static void Func();
};
class Derived : public Base {
public:
void Test()
{
std::cout<<"hello";
}
};
void Base::Func()
{
for (int i = 0; i != vec.size(), i++)
{
vec[i]->Test();
}
}
问题是:我需要从每个派生类中调用“Test()”函数。但这必须以编程方式完成,因为我不知道会创建哪些其他派生类
示例:
//Base.h
class Base {
static std::vector<Base*> vec;
public:
virtual void Test() = 0;
static void Func();
};
//Base.cpp
void Base::Func()
{
for (int i = 0; i != vec.size(), i++)
{
vec[i]->Test();
}
}
我的 Base::Func() 将在任何帧被调用。
此时“用户”将创建自己的实现和头文件,如下所示:
//Derived.h
class Derived : public Base {
public:
void Test() override;
};
//Derived.cpp
void Derived::Test()
{
//Insert code here
}
提前感谢您的帮助。
PS 我需要类似游戏引擎的更新方法的东西。就像 cocos2d 的更新方法一样。
【问题讨论】:
-
有什么问题吗? (这应该就像你描述的那样工作)
-
问题是:我需要从每个派生类中调用“Test()”函数。但这必须以编程方式完成,因为我不知道将创建哪些其他派生类
-
您的解决方案非常完美。这正是虚拟的目的。你试过了吗?
-
由于您需要创建一个对象来存储所有派生对象,只需将
Func()设为非静态并从包含所有派生类的对象中调用它。 -
如果您尝试发布的代码,您究竟会在哪里停止?
标签: c++ class inheritance