是否有可能在声明C ++类的虚拟静态常量的值?(Is it possible to declare

2019-07-29 18:41发布

我想有具有恒定字段(如与不能编译时间之后修改的类相关联的唯一ID)的基类。 到目前为止, static const声明会就好了。 现在,我想继承这个基类,并确保这一类的孩子们有相同的领域,但与自己的价值观。 我怎样才能做到这一点?

比方说,我想有一个叫做基类BaseID保存现场int 0值。然后,我想有类ABC ,它们都是公共的孩子Base我想,以确保这些孩子本来也有ID为1,2和3(相应值的字段由“确保”,我的意思是这样得到一个编译错误,如果他们没有一个ID显式声明)。

如果我能设法建立这种情况下,我的预期是该请求的ID一的领域Base*指针,我应该得到取决于指针是否为创造不同的价值new A() new B()new C()

我的猜测是申报IDvirtual static const ,这当然是没有意义的,并给出一个编译错误。

但后来我能做些什么来实现所描述的结果呢? (我能想象的唯一的事情是将申报ID为虚函数返回一个整数,然后硬编码值到函数体,但我正在寻找的东西更优雅。)

先感谢您!

Answer 1:

static方法不能是virtual ,而没有数据成员可以是virtual

但是你可以隐藏static在派生类中的字段,并使用一个virtual的方法来回报他们。

class A
{
public:
    static const int ID = 0;
    virtual int getID() { return A::ID; }
};
class B : A
{
public:
    static const int ID = 1;
    virtual int getID() { return B::ID; }
};

替代方案:

class A
{
public:
    A(int id = 0) : ID(id) {}
    const int ID;
    getID() { return ID; }
};
class B : public A
{
public:
    B() : A(1) {}
};


文章来源: Is it possible to declare a virtual static constant value in a C++ class?