【发布时间】:2015-12-30 17:43:47
【问题描述】:
我仍在学习 C++ 的基础知识,但我目前正在开发一个使用派生类和虚拟方法的项目。所以情况是: 我有一个A类
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 值;在 A 类?
-
您将在另一个类的标题中使用 ClassB 类的前向声明,并在 cpp-File 中包含 include。与 Sentinel 一起,如下所述,它将避免循环...