【发布时间】:2013-12-08 05:41:30
【问题描述】:
纯虚函数不应该有主体,但我刚刚注意到编译器接受了以下代码:
class foo
{
virtual void dummy() = 0
{
cout << "hello";
}
};
那么,为什么允许纯虚函数有一个实体呢?还有,即使函数有body,类还是不能实例化,这是为什么呢?
【问题讨论】:
-
我知道删除 =0 将允许我创建对象。但我想这不是我问的问题。我想知道为什么我们不能创建抽象类的对象?
-
@DeveshAgrawal
=0是对编译器的声明,即在您覆盖该方法之前,您不应该实例化该类,这与该方法是否实际实现无关。 -
@DeveshAgrawal 我编辑了您的问题以使其更清楚,我是否正确理解了您的问题?
-
我知道这已经有几年的历史了,但是当搜索这个主题时,你最终会出现在这里......根据这个(草稿!)open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4849.pdf on 11.7.3, 2:[注意:函数声明不能同时提供纯说明符和定义。—尾注] [示例:struct C {virtual void f() = 0 { };// 错误};— 结束示例]。我这边没有解释,你可能想知道