我有一个类,我们称之为A,在该类定义内部,我有以下代码:
static QPainterPath *path;
换句话说,我声明了一个指向路径对象的静态(全类范围)指针;所有此类的实例现在将具有相同的共享数据成员。我希望能够构建这个类,并将其继承为更专业的形式,分层行为,并且每个类都有自己独特的路径对象(但不必重复计算边界框或调用绘画例程等乏味工作)。如果我创建一个名为F的子类,我希望F使用从A继承的绘图例程,但使用在F中声明的静态(类范围)路径对象。我尝试将声明放在私有部分(并在派生类F中重复它),并尝试将其放在受保护的部分,但是没有成功。
我可以有点理解为什么会出现这种情况:
void A::paint() {
this->path...
即使对象属于类F,它仍然引用A::path而不是F::path。是否有一种优雅的方式可以解决这个问题,允许每个类维护一个静态路径对象,同时仍然使用在基类中定义的绘图代码,并且使所有类(除了基类)都是真实可实例化的?
B
对象和一个指向你的B
的A*
类型指针,并调用该方法时,则会调用A
版本而不是B
版本(如果你使用B*
类型指针进行此操作,则正常工作)。 - JupiterGetA
方法。 理想情况下,应该设计一种方法,只需要在基类中进行此类定义。 - sancho.s ReinstateMonicaCellio