我有一个类,我们称它为 A,在该类定义中我有以下内容:
static QPainterPath *path;
也就是说,我声明了一个指向路径对象的静态(类范围)指针;此类的所有实例现在都将具有相同的共享数据成员。我希望能够以此类为基础,将其子类化为更专业的形式,分层行为,并且每个类都有自己独特的路径对象(但不必重复计算边界框或调用绘画例程等无聊的部分)。
如果我将它子类化以创建一个类 F(例如),我希望 F 使用从 A 继承的绘图例程,但要使用在 F 中声明的静态(类范围)路径对象。我尝试在上面的声明私有部分(并在派生类 F 中重复它),并尝试将它放在受保护部分中,所有这些都没有任何乐趣。
我可以看到为什么会这样:
void A::paint() {
this->path...
指的是 A::path 而不是 F::path,即使对象属于 F 类。
有没有一种优雅的方法来解决这个问题,并允许每个类维护一个静态路径对象,同时仍然使用基类中定义的绘图代码,并使所有类(可能除了基类)都是真实的和可实例化的?