纯虚拟和内联定义

时间:2010-10-01 02:34:19

标签: c++

考虑:

struct device{
    virtual void switchon() = 0 {}
};

int main()
{

}

我写了类似于以下的代码并且它给出了一个错误:

  

函数定义的纯指定符   编译由于终止而终止   -Wfatal-错误。

当我问他时,他向我展示了标准中的以下引用:

  

在类中声明的虚函数   应被定义或宣布为纯粹的   (10.4)在该类中,或两者兼有;但不是   诊断是必需的(3.2)。

我似乎无法理解这意味着什么,我认为这在某种程度上是不相关的。

PS:如果这不是相关的引用,请引导我选择合适的引文,以便我能有更好的反驳。

2 个答案:

答案 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() {}