c++ - 如何使用抽象类型的私有静态成员变量
问题描述
我正在尝试声明一个抽象类型的私有静态成员变量。编码:
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 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;
推荐阅读
- mysql - MySQL JSONField 嵌套数组 SUM
- c# - 错误 CS1503 参数 1:无法从“KurseviApp.Kurs”转换为“KurseviApp.Student”
- class - 比较 Kotlin 类型和 java 类
- javascript - Meteor Collections Simpleschema,自动值取决于其他字段值
- office-js - 从清单文件 Office JS 中的加载项命令调用自定义函数
- java - JavaFX Frozen GUI 在流面板上添加按钮时
- ubuntu - TPM 与裤子安装问题
- identityserver4 - 从 SamlResponse 读取中继状态
- javascript - chrome中的表格单元格问题
- iteration - Lisp,向后迭代