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

问题描述 投票:1回答:1

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

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使类非抽象的,但是这不是我真正想做的事情。

c++ static private abstract
1个回答
1
投票

你不能实例化一个抽象类。你必须从它派生类和覆盖纯虚方法。然后,您可以实例化派生类,并使用创建的实例来初始化抽象类的参考:

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;
© www.soinside.com 2019 - 2024. All rights reserved.