【发布时间】:2016-04-16 22:16:08
【问题描述】:
C++ 中的接口可以有非虚函数吗?
或
C++ 中的接口只能包含非虚函数(原型类型)?
【问题讨论】:
-
“界面”对您来说意味着什么?
标签: c++ interface abstract-class
C++ 中的接口可以有非虚函数吗?
或
C++ 中的接口只能包含非虚函数(原型类型)?
【问题讨论】:
标签: c++ interface abstract-class
一般来说,“接口”类(几乎在所有 OO 语言中)是一个只有接口、没有数据、也没有实现的类。
在 C++ 中,这样的类是只有纯抽象函数的类,所以如果你有非虚拟函数,你就不能在 C++ 中拥有“接口”类。
【讨论】:
C++ 本身没有接口。因此对它们没有任何限制。
抽象类通常用于表示接口。是否为虚拟方法定义默认实现并允许在类接口类中使用最终方法,这是一个约定俗成的问题。
【讨论】:
final 暗示 virtual,所以如果您打算引用非虚函数以及 final,那么您的最后一句话有点含糊,虚拟的。
virtual 并不意味着该函数不再是虚拟的。一旦成员函数被声明为virtual,无论您在继承链中走多远,无论是否进一步使用virtual 关键字,它都将保持虚拟状态。所以在 C++11 和 final 特殊符号(它不是关键字)之前,没有办法制作“最终”函数。