如何使用抽象类型的私有静态成员变量
How to use private static member variable of abstract type
我正在尝试声明一个抽象类型的私有静态成员变量。代码:
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
以使 class 非抽象,但这不是我真正想做的。
您不能实例化抽象 class。您必须从中派生一个 class 并覆盖纯虚方法。然后,您可以实例化派生的 class,并使用创建的实例来初始化您的抽象 class 引用:
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;
我正在尝试声明一个抽象类型的私有静态成员变量。代码:
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
以使 class 非抽象,但这不是我真正想做的。
您不能实例化抽象 class。您必须从中派生一个 class 并覆盖纯虚方法。然后,您可以实例化派生的 class,并使用创建的实例来初始化您的抽象 class 引用:
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;