关于界面类的google风格指南问题 我是C++初学者,我读谷歌风格指南。 它建议以下关于接口类的内容 它只有公共纯virtual(“=0”)方法 它可能没有非静态数据成员
我想知道为什么会这样关于界面类的google风格指南问题 我是C++初学者,我读谷歌风格指南。 它建议以下关于接口类的内容 它只有公共纯virtual(“=0”)方法 它可能没有非静态数据成员,c++,C++,我想知道为什么会这样 (a) 接口类不应具有默认函数和 (b) 非静态数据成员?关于问题(b),是否与 类的初始化还是序列化 这是一个更为琐碎和私人的问题 (c) 如果我亲自将“mix-in”类称为“protocol”类,您认为有什么问题吗?我试着用一个标记名来命名我在类中的混合,比如“ClassInterface”中的“Interface”,这是google style guide建议的。“mix-in”虽然我想表达我对这个名字的敬意,但对我来说,这门课并不直观。“协议”对我来说很直观,
- (a) 接口类不应具有默认函数和
- (b) 非静态数据成员?关于问题(b),是否与 类的初始化还是序列化
- (c) 如果我亲自将“
”类称为“mix-in
”类,您认为有什么问题吗?我试着用一个标记名来命名我在类中的混合,比如“protocol
”中的“ClassInterface
”,这是google style guide建议的。“Interface
”虽然我想表达我对这个名字的敬意,但对我来说,这门课并不直观。“mix-in
”对我来说很直观,因为它是一种玩家共享的过程协议
非常感谢。我不知道你说没有默认功能是什么意思。没有数据成员基本上是为了避免具有多个接口的类的各种冲突,特别是接口和真正的基类 例如,假设类X实现了InterfaceA,它有成员m_foo。如果InterfaceB也有成员m_foo,并且X决定从InterfaceB继承并实现该接口,则X的现有实现可能会被破坏,因为在X中提及m_foo将是不明确的。见: 我可能还应该补充一点:没有成员变量是接口不提供任何实现的逻辑结果。因为它们不做任何工作或运行任何代码,所以接口类没有理由需要非静态成员变量 编辑:好的,那么默认函数,我想你的意思是,为什么样式指南说函数不能有实现,必须是纯虚拟的 <>这又归结为C++中的多重继承的困难情况。如果接口类方法具有实现,则可以继承它们而无需重新实现。如果您有两个具有相同方法名的接口,并且您继承了这两个接口,那么将调用哪个函数?这与成员变量的问题相同 基本上,这都回到了C++中多重继承的问题。接口规则模仿java中的实际语言结构,它没有完全的多重继承。有了这些限制,您可以避免这些棘手的情况,但也会丢失C++完全多继承的部分权力。p>
参见:谢谢Nir,这是对问题(b)的非常好的回答。“没有默认功能”是指“默认实现”。谷歌风格指南建议接口类只有公共纯虚拟(“=0”)。所以它不应该有任何实现。但我不知道为什么这是必要的。再次感谢你,再次感谢你。我想不出多个继承中函数的冲突。你给我的推荐信也很好。