【问题标题】:Interface Vs Abstract classes C++接口与抽象类 C++
【发布时间】:2016-04-16 22:16:08
【问题描述】:

C++ 中的接口可以有非虚函数吗?

C++ 中的接口只能包含非虚函数(原型类型)?

【问题讨论】:

  • “界面”对您来说意味着什么?

标签: c++ interface abstract-class


【解决方案1】:

一般来说,“接口”类(几乎在所有 OO 语言中)是一个只有接口、没有数据、也没有实现的类。

在 C++ 中,这样的类是只有纯抽象函数的类,所以如果你有非虚拟函数,你就不能在 C++ 中拥有“接口”类。

【讨论】:

  • 谢谢 Joachim 我理解你的回答方式
【解决方案2】:

C++ 本身没有接口。因此对它们没有任何限制。

抽象类通常用于表示接口。是否为虚拟方法定义默认实现并允许在类接口类中使用最终方法,这是一个约定俗成的问题。

【讨论】:

  • 从 C++11 开始,有一个上下文关键字 final 暗示 virtual,所以如果您打算引用非虚函数以及 final,那么您的最后一句话有点含糊,虚拟的。
  • “决赛”是指老式的、老式的决赛,即那些没有附加“虚拟”关键字的决赛。 “非虚拟”可能是更正确的术语。
  • 好吧,讽刺的是,“非虚韵母”可以被派生函数隐藏,而实际韵母可以被隐藏,因此实际上更趋于终结:-)
  • 仅仅因为子类中的覆盖从声明中删除了单词virtual 并不意味着该函数不再是虚拟的。一旦成员函数被声明为virtual,无论您在继承链中走多远,无论是否进一步使用virtual 关键字,它都将保持虚拟状态。所以在 C++11 和 final 特殊符号(它不是关键字)之前,没有办法制作“最终”函数。
猜你喜欢
  • 2017-02-19
  • 2016-03-24
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多