我是c ++的初学者,我阅读谷歌风格指南。 它建议了关于接口类的以下内容。
virtual
(" = 0")methods
non-static
个数据成员。我想知道它建议的原因
这是一个更微不足道的个人问题,
mix-in
"作为" protocol
"班上个人,你觉得有什么问题吗?我尝试使用标记名称命名我的混合类,例如" Interface
"在" ClassInterface
",这是谷歌风格指南建议的。 " mix-in
"虽然我想表达我对这个名字的敬意,但这对我来说并不直观。 " protocol
"对我来说很直观,因为它是一种由玩家共享的过程。如果有人知道原因或有任何意见。请让我知道。 非常感谢你。
答案 0 :(得分:2)
我不确定你没有默认功能是什么意思。没有数据成员基本上是为了避免具有多个接口的类的各种冲突,或者特别是接口和真正的基类。
例如,假设类X实现了InterfaceA,它具有成员m_foo。如果InterfaceB也有成员m_foo,并且X也决定从InterfaceB继承并实现接口,那么很可能X的现有实现将被破坏,因为引用X中的m_foo将是不明确的。请参阅:c++ Multiple parents with same variable name
我应该补充一点:没有成员变量是没有提供任何实现的接口的逻辑结果。由于它们不做任何工作或运行任何代码,因此接口类不需要非静态成员变量。
编辑:好的,所以默认函数,我认为你的意思是,为什么样式指南说函数不能有实现,必须是纯虚函数。
它再次归结为c ++中所谓的多重继承的困难案例。如果接口类方法有实现,则可以继承它们而无需重新实现。如果你有两个具有相同方法名称的接口,并且你继承了两个接口,那么哪个函数被调用?这与成员变量的问题相同。
基本上,这一切都回到了这样一个事实,即c ++中的多重继承可能非常棘手。接口规则模仿java中的实际语言构造,它没有完全的多重继承。有了这些限制,你可以避免这些棘手的情况,但你也失去了c ++完全多重继承的一些功能。