假设我有一对基类:
class A
{};
class B
{
virtual void foo(A* ref);
virtual void foo2(A* ref);
};
从他们那里,一些派生类:
class C : virtual public A
{
int data;
};
class D : public B
{
virtual void foo(A* ref)
{
((C*) (ref)).data = 5;
}
};
class E : virtual public A
{
int otherData;
};
class F : public B
{
virtual void foo2(A* ref)
{
((E*) (ref)).otherData = 6;
}
};
最后,我们有一个效仿的类,如下所示:
class G : public E, public C
{
};
主要功能如下:
int main()
{
B* myD = new D();
B* myF = new F();
A* myA = new G();
myD->foo(myA);
myF->foo2(myA);
return 0;
}
好的,忽略这是一个“可怕的钻石”的明显事实(由于 ,“多重 As”问题已被避免virtual
),一般的想法是我希望我的所有对象都是 Gs、Ds 和 Fs,但是存储为对 As 和 Bs 的引用。我希望能够使用 B(实际上总是 D 或 F)虚函数来修改 G 的值......但是,A 和 B 不知道它们的任何子类,因此不能使用声明他们。这意味着虚函数参数必须始终是指向 A 的指针。但是,D 希望它的输入始终是 C,而 F 希望它的输入始终是 E。虽然如果 G 是,这可能不是问题仅从一个父级继承,我们当前的 G 是从两个父级继承的;我不知道如何this
指针实际上在这种情况的基础上下文中工作......但是,我不认为这将是一种可能的情况。
是否有人愿意阐明将指针转换为父/子类的机制,以及是否有任何方法可以实现这一点?