2017-10-19 76 views
1

我有一段cpp的阶级是这样的值:C++重写继承的静态常量

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{}; 

如何更改的_a值,_b_c为了改变myMethod的行为?即使我再次声明它们,myMethod仍将使用值class A而不是class B

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

编辑:myMethod()public,而不是private

+0

如果您明确调用B :: myMethod(),行为是否会改变? – xyious

+1

这些值是常量,因此它们不能更改。 –

+1

你不能改变它们,因为它们是'const'。因此 - 它们只能被初始化。 –

回答

0

您不能直接更改const静态成员,但可能您想要的是virtualgetA(), getB(), getC()方法。

然后你的A::myMethod()实现使用getters而不是直接访问静态成员。

在你B类,则可以覆盖get方法返回不同的值(可能来自新申报静读或任何有意义的),然后A::myMethod()会自动接他们回家。

0

由于名称的状态为const,因此无法更改常量的值。你只能初始化它们。

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;