【发布时间】:2019-09-15 01:54:29
【问题描述】:
我对类中的静态变量有疑问。 我正在尝试编辑子类的静态变量而不编辑其他子类的静态变量。
头文件:
class A {
public:
A() {}
void printName() {qDebug() << _name; }
void changeName(QString name) {_name = name;}
private:
static QString _name;
};
QString A::_name = QString("default");
class B : public A {
public:
B() : A() {}
};
class C : public A {
public:
C() : A() {}
};
我正在尝试编辑 B 类的静态 _name 而不编辑 C 类的 _name。当我在 main.cpp 中尝试此代码时:
int main(int argc, char *argv[])
{
A *a = new B{};
A *b = new B{};
A *c = new C{};
a->printName();
b->printName();
c->printName();
B *tmp = dynamic_cast<B*>(a);
tmp->changeName("new");
qDebug() << "Then";
a->printName();
b->printName();
c->printName();
}
这就是我所拥有的:
"default"
"default"
"default"
Then
"new"
"new"
"new"
有人知道我该如何解决这个问题吗?
这是我也尝试过的:
class A {
public:
A() {}
virtual ~A() {}
void printName() {qDebug() << _name; }
virtual void changeName(QString name) {_name = name;}
private:
static QString _name;
};
QString A::_name = QString("default");
class B : public A {
public:
B() : A() {}
void changeName(QString name) override {_name = name;}
private:
static QString _name;
};
class C : public A {
public:
C() : A() {}
void changeName(QString name) override {_name = name;}
private:
static QString _name;
};
【问题讨论】:
-
@FrançoisAndrieux 没有其他解决方案吗?因为我有很多子类......在每个子类中创建相同的静态成员会很遗憾
-
为什么是
static? -
它是静态的,因为我希望这个变量在任何时候在我的子类 B 中都是相同的。
-
@starkmax 如果您希望每个子类具有不同的值,则需要不同的变量来保存这些值。目前只有一个变量。这就是
static类变量的用途。
标签: c++ class inheritance casting static-variables