如何使用抽象类型的私有静态成员变量

卡洛斯

我试图声明一个抽象类型的私有静态成员变量。编码:

class AbstractClass{
public:
    virtual double operator()() = 0;
};

class ThisOneContainsIt{
private:
    static AbstractClass var; //this does not work
    static AbstractClass & var; //this seems to work, but...
}

//my .cpp
AbstractClass & ThisOneContainsIt::var; //...this does not work either

现在我的想法耗尽了。我很确定这一定是有可能的-我总是可以删除= 0来使该类不抽象,但这不是我真正想要的。

Sid S

您不能实例化一个抽象类。您必须从中派生一个类并重写纯虚方法。然后,您可以实例化该派生类,并使用创建的实例来初始化您的抽象类引用:

class AbstractClass
{
    public:
        virtual double operator()() = 0;
};

class DerivedClass : public AbstractClass
{
    public:
        double operator()() override { return 0.0; }
};

class ThisOneContainsIt
{
    private:
        static DerivedClass d;

        static AbstractClass &var;
};

DerivedClass ThisOneContainsIt::d; 

AbstractClass &ThisOneContainsIt::var(d);

不过,我不知道您为什么要这样做。您最好这样做:

class ThisOneContainsIt
{
    private:
        static DerivedClass var;
};

DerivedClass ThisOneContainsIt::var;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章