gpt4 book ai didi

c++ - 从派生类访问静态常量变量

转载 作者:行者123 更新时间:2023-11-30 02:38:28 24 4
gpt4 key购买 nike

我想在每个派生类中设置名称 属性。并且还想像 Bar1::s_name 一样访问这个值。我下面的代码不起作用。那么我应该如何实现我的愿望呢?

 class Parent {
public:
static std::string getName() {
return s_name;
}
const static std::string s_name;
};


class Bar1 : public Parent {
public:
Bar1() : s_name("Bar1") {}
};

class Bar2 : public Parent {
public:
Bar2() : s_name("Bar2") {}
};


int main() {
Bar1 b;
b.getName();
return 0;
}

最佳答案

大概你想在一些多态上下文中使用它。如果是这样,则不能使用静态方法,因为它们不表现出多态行为。此外,静态成员对于每个实例都是相同的,包括派生对象。

你可能想要这样的东西:

class Parent {
public:
virtual std::string getName() {
return "Parent";
}
};


class Bar1 : public Parent {
public:
virtual std::string getName() override {
return "Bar1";
}
};

class Bar2 : public Parent {
public:
virtual std::string getName() override {
return "Bar2";
}
};

如果你也希望能够像Bar1::s_name那样静态地访问名称,你需要为每个类分配一个静态成员:

class Parent {
public:
virtual std::string getName() {
return s_name;
}
const static std::string s_name;
};

const std::string Parent::s_name = "Parent";

//likewise for the others

关于c++ - 从派生类访问静态常量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30777681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com