在C++中,为什么纯函数必须是虚拟的
In C++ why a pure function must be virtual?
我在谷歌和这里搜索过,但我不明白为什么类中的纯函数必须是虚拟的。我知道,将"正常函数"声明为纯函数可能不是很有用,但我不认为这是无稽之谈。我的意思是,"纯"这个词只是用来声明一个抽象类。好吧,我不能将多态性与纯正常函数一起使用,但无论如何,主要原因(将类声明为抽象)已经达到了。我错了吗?
不要求纯函数是虚拟的。如果你在想"纯虚拟功能"这个术语,"纯"适用于那里的"虚拟";该功能纯粹是虚拟的。这是"纯净"一词的另一种用法。
我的意思是,"纯"这个词只是用来声明一个抽象类。
事实并非如此。声明纯虚拟函数的原因不是为了阻止封装类的实例化;这是为了确保具体的子类实现该方法,通常是因为抽象类无法提供合理的实现。
好吧,我不能将多态性与纯正常函数一起使用,但无论如何,主要原因(将类声明为抽象)已经达到了。
如果您正在寻找一种在没有任何纯虚拟函数的情况下声明类抽象的方法,C++没有专门的语法。我看到的建议是声明和实现一个纯虚拟析构函数(你可以这样做),或者使构造函数受到保护(但使构造函数受到限制不会使你的类通过std::is_abstract
)。在任何情况下,将其语法附加到任意成员函数都没有多大意义;像CCD_ 2这样的东西会更有意义。
您想要拥有"纯函数"的唯一原因是确保从此类继承的子类定义该函数的实现。如果你允许纯函数是非虚拟的,因此不能被覆盖,那么它们基本上是毫无意义的。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数