C++ C++;重写继承的静态常量变量的值
我的cpp课程是这样的: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{}; 如何
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(),它们为不同的子类返回不同的常量。