C++ C++;重写继承的静态常量变量的值

C++ C++;重写继承的静态常量变量的值,c++,C++,我的cpp课程是这样的: class A{ protected: static const int _a = 0, _b = 0, _c = 0; std::string _data; public: void myMethod(); //method that changes _data based on the value of _a, _b and _c }; 如果我想创建,让我们说: Class B : public A{}; 如何

我的cpp课程是这样的:

class A{
    protected:
      static const int _a = 0, _b = 0, _c = 0;
      std::string _data;
    public:
      void myMethod(); //method that changes _data based on the value of _a, _b and _c
};
如果我想创建,让我们说:

Class B : public A{};
如何更改
\u a
\u b
\u c
的值以更改
myMethod
的行为?即使我再次声明它们,
myMethod
仍将使用
class A
中的值,而不是
class B

如果我想更改这3个数字,是否需要覆盖整个
myMethod
函数


编辑:
myMethod()
public
,而不是
private
您不能直接更改
const
静态成员,但可能您需要的是
虚拟的
getA(),getB(),getC()
方法

然后,您的
A::myMethod()
实现使用getter,而不是直接访问静态成员


B
类中,您可以重写
get
方法以返回不同的值(可能从新声明的static或任何有意义的内容中读取),然后
A::myMethod()
将自动拾取这些值。

当名称声明
常量时,您不能更改常量的值。您只能初始化它们

class A{
    protected:
        static const int val1, val2, val3;
    public:
        void myMethod();
};

const int A::val1 = 9;
const int A::val2 = 5;
const int A::val3 = 4;

这些值是常量,因此无法更改。您无法更改它们,因为它们是
const
。因此-它们只能初始化为.Eeek。标识符名称中的前导下划线让我畏缩。一旦有人选择将第一个字母更改为大写字母,您就违反了以下规则:名称以下划线开头,后跟大写字母,将保留用于实现。不要走得离边缘太近;只是不要在名称中使用前导下划线。这些值是
const
(可能是有原因的)。改变它们将是。。。令人不快的初始化后常量不应该更改(否则它们就不会是
const
ants)。您不想这样做(这是不可能的)。请回顾继承和多态在C++中的作用。您希望覆盖该函数(使其成为虚拟函数)。如果需要,可以使用其他虚拟函数getA()、getB()、getC(),它们为不同的子类返回不同的常量。