在继承的类中重新定义常量成员变量

3 c++ polymorphism inheritance

假设我希望在父类中定义一个成员变量,并在继承的类中设置其值。也许这些标识类中可用的功能或子类的性质。例如:

class A
{
public:
    inline int getX() { return x; }
protected:
    const int x = 0;
};

class B : public A
{
protected:
    const int x = 10;
};

class C : public A
{
protected:
    const int x = 50;
};
Run Code Online (Sandbox Code Playgroud)

毋庸置疑,范围问题将阻止上述操作正常进行。但是,有没有办法使此工作按预期进行?

由于变量是用来标识继承类的性质的,因此,我希望它是const的-就我所知,如果不是const而是仅在构造函数中重新定义,则不会出现此问题。

小智 6

在摆弄编译器以确保示例代码合理时,我实际上遇到了这样一个事实,即我试图定义常量的方式是C ++ 11特定的。这使我研究了以前的处理方式,然后发现了这个问题,从而间接地揭示了该问题。

以这种方式定义变量应通过让基类在其构造函数中接受参数的形式来完成,形式为:

class A
{
public:
    A( const int& type ) : x(type) {}
    inline int getX() { return x; }
protected:
    const int x;
};

class B : public A
{
public:
    B() : A(10) {}
};

class C : public A
{
public:
    C() : A(50) {}
};
Run Code Online (Sandbox Code Playgroud)

这将按预期工作,并允许继承的类重新定义常量x。