相关疑难解决方法(0)

子类化时覆盖静态变量

我有一个类,我们称之为A,在该类定义中我有以下内容:

static QPainterPath *path;
Run Code Online (Sandbox Code Playgroud)

也就是说,我正在声明一个指向路径对象的静态(类范围)指针; 此类的所有实例现在都具有相同的共享数据成员.我希望能够构建这个类,将其子类化为更专业的形式,分层行为,并且每个类都有自己唯一的路径对象(但不必像重复计算边界框或调用绘图例程那样重复).

如果我将它子类化为创建类F(例如),我希望F使用A中继承的绘图例程,但是要使用F中声明的静态(类范围)路径对象.我尝试过上面的声明私有部分(并在派生类F中重复它),并尝试在受保护的部分中使用它,一切都没有乐趣.

我可以理解为什么会这样:

void A::paint() {
    this->path...
Run Code Online (Sandbox Code Playgroud)

指的是A :: path而不是F :: path,即使对象属于F类.

是否有一种优雅的方法来绕过这个,并允许每个类维护一个静态路径对象,同时仍然使用基类中定义的绘图代码,并使所有类(可能除了基类)是真实的和可实例化的?

c++ inheritance static overriding

17
推荐指数
3
解决办法
2万
查看次数

标签 统计

c++ ×1

inheritance ×1

overriding ×1

static ×1