下面的代码片段来自我的Keyboard.h
和Keyboard.cpp
. 我的问题是,我将如何实现分层的父子关系?因此,如果孩子没有实现任何虚拟成员,则父母可以自由地这样做。例如,子级实现了 KeyboardDepressA,但没有实现 KeyboardDepressB,让父级实现 KeyboardDepressB 的 catch。父母和孩子当然也有不同的类型,什么不是......
我不想让孩子知道父母的支持Device::Keyboard
;因此,我想使用 get 实例调用父级,如KeyboardDepressB
. 为了完成这项工作,我需要将父级分配给static
实例本身,但static
不支持关键字this
。所以我该怎么做?
我将代码保持在最低限度。如果需要更多,请随时询问。^^
class Keyboard
{
private:
Keyboard ();
~Keyboard ();
public:
static Device::Keyboard& Instance();
static void SetParent(Device::Keyboard *cpParent);
virtual void KeyboardDepressA ();
virtual void KeyboardReleaseA ();
virtual void KeyboardDepressB ();
virtual void KeyboardReleaseB ();
… … ...
};
Device::Keyboard&
Keyboard::Instance()
{
static Device::Keyboard nrKeyboard;
return nrKeyboard;
} // member
void
Keyboard::SetParent(Device::Keyboard *cpParent)
{
Device::Keyboard& nrParent(Keyboard::Instance());
*this = cpParent;
} // member
void
Keyboard::KeyboardDepressA()
{
Device::Keyboard& nrParent(Keyboard::Instance());
nrParent.KeyboardDepressA();
} // member
void
Keyboard::KeyboardReleaseA()
{
Device::Keyboard& nrParent(Keyboard::Instance());
nrParent.KeyboardReleaseA();
} // member
void
Keyboard::KeyboardDepressB()
{
Device::Keyboard& nrParent(Keyboard::Instance());
nrParent.KeyboardDepressB();
} // member
void
Keyboard::KeyboardReleaseB()
{
Device::Keyboard& nrParent(Keyboard::Instance());
nrParent.KeyboardReleaseB();
} // member