我仍在学习C++的基础知识,但我目前正在使用派生类和虚方法来研究项目。所以情况是: 我有一个ClassA的将指针传递给另一个派生类
class ClassA
{
public:
virtual void action();
};
,并且有两个派生类B和C:
#include "ClassA.h"
class ClassB: public ClassA
{
public:
virtual void action();
int valueB;
};
-
#include "ClassA.h"
class ClassC: public ClassA
{
public:
virtual void action();
int valueC;
};
我想一个指针传递给ClassB的对象作为ClassC中action()的参数,所以我可以这样做:
void ClassC::action(ClassB * ptr)
{
cout << "The value is: " << ptr->valueB;
}
但是我找不到一个可行的方法来做到这一点。所有对象的指针存储在
vector<ClassA *> objects
其中
objects[0]=new ClassC();
objects[1]=new ClassB();
,如果我尝试像
objects[0]->action(object[1])
然后我需要在ClassA的我的虚方法有一个参数ClassB的* 。然后对于一个程序来识别我尝试的类型,包括整个ClassB.h(坏主意,它创建一个包含或什么的“循环”)或使用一个前向声明类ClassB; (我收到关于对不完整类型的无效使用的错误)。所以我现在被卡住了。我希望一切都很清楚,但如果需要的话,我当然可以提供更多的数据。
对。因为将一个'A *'盲目地下传到'B *' –
是不安全的,那么如何摆脱valueB和valueC并且只是一个int值;在ClassA中? – tetorea
您可以在另一个类的头文件中使用类ClassB的前向声明,并在cpp-File中使用include。如前所述,与哨兵一起,它将避免循环... –