【发布时间】:2022-01-15 16:27:49
【问题描述】:
我刚刚了解了 C++ 中的类。我知道可以使用成员初始化列表语法(MIL)来初始化数据成员,但是我认为使用起来不是很直观,而且我认为这是一种非常丑陋的数据成员分配方式。
显然,C++ 中的类继承必须通过这种 MIL 语法来完成。我不明白这背后的理由,谷歌搜索没有给我答案。我也找不到该规则的任何反例。我在网上看到的每个关于继承的例子都需要 MIL。
所以我的问题是:是否可以在没有 MIL 的情况下设置继承?
如果答案是肯定的,请说明如何。 如果答案是否定的,请解释为什么不这样做。 (给出强制 MIL 继承的理由)
【问题讨论】:
-
这取决于...如果您的所有类都可以聚合或列表初始化,您可以完全省略构造函数。但是,如果您需要在层次结构中的某处提供构造函数,则必须使用初始化列表。丑吗?口味问题!这是一个清晰的概念,很好。
-
你能详细说明一下在某处提供构造函数吗?
-
在层次结构中的某处意味着:如果你有类 A、B 和 C 并且 A 继承 B 等等,其中一个有构造函数,你不能再使用列表或聚合初始化.
-
顺便说一句:不要等待解释,只需尝试一下。你的编译器是找出什么是允许的,什么是不允许的最好的朋友。并非所有编译的东西都是正确的,但作为初学者,尝试阅读的内容会很有趣。带上你的初学者书,让我们走吧!
-
有什么例子吗?我不知道什么是聚合。另外,什么是提供构造函数?
标签: c++ inheritance initializer-list