所以这是我的困境:
我有一个基类(假设是一个通用的 Person 类):
class Person{
public:
Person();
~Person();
virtual void Init();
virtual void SaySomething();
};
现在我想让其他类继承这些方法。
class Worker: public Person{
public:
Worker();
~Worker();
void Init(){
// would do some special initializing.
}
void SaySomething(){
// Print something about the worker.
}
};
现在我会有一个经理班:
class Manager{
public:
void Init();
void Run();
void SwitchPerson(Person* p);
protected:
vector<Person*> people;
};
我给出的 Worker 是 Person 的子类的例子可能不是最好的。但重点不是类的内容,而是继承,更具体地说,是类如何理解和了解其他类。
现在在我的主要功能中,我将拥有以下内容:
int main()
{
Manager* m = new Manager();
m->Init();
// Create a new worker;
Person* w = new Worker();
m->SwitchPerson(w);
return 0;
}
现在我不确定这是否是解决问题的正确方法。问题是可以有无限数量的子类,而经理类不能知道它们。manager 类只知道父(Person)类。因此 SwitchPerson 将添加 Person 类型的新 Worker 类(现在我不确定这是否在结构上不正确,我有一种感觉。)到向量中。但首先它需要确保向量中已经没有 Worker Class。我尝试使用 typeid.name 但这显然返回了父(人)类的名称。
我曾想过使用带有向量的模板.. 但这又需要管理器类了解 Worker 或任何其他子类。
如果您需要我解释其他任何内容或添加任何相关信息,请告诉我。
编辑:
注意:Person、Worker 和 Manager 是无关紧要的。它可以是相机、镜头和舞台。
开关人:
假设一次只能有一个人处于活动状态。使用相机、镜头和舞台类比会更有意义。由于只有一台相机可以进入屏幕,可以说。
假设我们保持相机类比。我们有了第一个场景,我们首先调用 SwitchCamera() 并传入新的 Camera。但问题是舞台对象(即经理)不了解镜头或不同类型的镜头。可能有 100 或 10000。没关系。场景只知道作为所有镜头类的基类的相机。
因此,当我们 switchCamera() 时,我们可以利用对象来控制镜头,比如说(不是很现实,但无论如何)。所有控件首先作为 Camera 基类中的虚拟成员实现。所以镜头类都有相同的成员。
现在您已经完成了第一个场景并想再次切换相机。您将再次调用 SwitchCamera() 并传入新的第二个摄像头。在切换相机中,目标是将传递的相机对象设置为活动相机,然后将其推送到矢量。
但我们不想要相同镜头的两个副本。这就是问题所在。我希望能够检查传入的 Camera* camera = new Lense123(); 已经在向量内。如果是,那么我想使用原始的并丢弃新通过的。