考虑:
struct device{
virtual void switchon() = 0 {}
};
int main()
{
}
我写了类似于以下的代码并且它给出了一个错误:
函数定义的纯指定符 编译由于终止而终止 -Wfatal-错误。
当我问他时,他向我展示了标准中的以下引用:
在类中声明的虚函数 应被定义或宣布为纯粹的 (10.4)在该类中,或两者兼有;但不是 诊断是必需的(3.2)。
我似乎无法理解这意味着什么,我认为这在某种程度上是不相关的。
PS:如果这不是相关的引用,请引导我选择合适的引文,以便我能有更好的反驳。
答案 0 :(得分:5)
纯虚函数可能有一个定义(在类定义之外)。这完全是可选的。但是你要做的事情是完全错误的,因为
C ++ 03 [第10.4/2
节]说:
[注意:函数声明不能同时提供纯说明符和定义 -end note] [例如:
struct C { virtual void f() = 0 { }; // Ill-formed }
但是你可以自由写作
struct device{
virtual void switchon() = 0;
};
void device::switchon() { } // Definition {optional}
int main()
{
}
答案 1 :(得分:-1)
你可以有一个“纯粹的”虚拟功能,即。基类具有没有函数的实现
virtual void switchon() = 0;
和可选提供派生类必须覆盖的实现。
void base_class::switchon() {}
OR
您可以拥有“非纯”虚拟功能并提供默认或空实现
virtual void switchon() {}