是否可以在C++类中声明虚拟静态常量值?

Sis*_*dám 16 c++ virtual inheritance constants static-members

我想要一个具有常量字段的基类(比如与编译时间后无法修改的类关联的唯一ID).到目前为止static const声明会很好.现在,我想继承这个基类,并确保这个类的子类具有相同的字段,但具有自己的值.我怎样才能做到这一点?

让我们说,我希望有一个基类,调用Base一个值为0 的ID字段int.然后,我想要这些类A,B并且C,所有这些都是公共的孩子,Base我想做确保这些孩子也会有ID相应值为1,2和3 的字段(通过'确定',我的意思是如果他们没有明确声明ID,就会遇到编译器错误).

如果我可以设法构建这个场景,我的期望是要求指针的ID字段Base*,我应该得到不同的值,这取决于指针是否被创建为new A(),new B()new C().

我的猜测是声明IDvirtual static const,这当然没有意义并且给出了编译器错误.

但是,我该怎样做才能达到上述结果呢?(我唯一可以想象的是声明ID为返回整数的虚函数,然后将值硬编码到函数体中,但我正在寻找更优雅的东西.)

先感谢您!

Luc*_*ore 15

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; }
};
Run Code Online (Sandbox Code Playgroud)

替代方案:

class A
{
public:
    A(int id = 0) : ID(id) {}
    const int ID;
    getID() { return ID; }
};
class B : public A
{
public:
    B() : A(1) {}
};
Run Code Online (Sandbox Code Playgroud)