![]() |
1
3
作为一种语言,C++并没有很好地将实现细节保持在头文件之外,或者一般与接口分离。你在这里做的任何事都是妥协。 一种硬线方法是不使用任何公共成员变量,并为此分离和公开纯虚拟接口(在单独的文件中)。此时,实际的类甚至不需要在一个头文件中——只是在一个源文件中,由工厂函数引用——所以剩余的头文件是您想要的干净的。这不是我推荐的方法。 在任何情况下,C++中都有各种实际的考虑因素,它们限制类成员的顺序。把所有的公众成员都放在班上是一个很好的计划A,但有时它不会奏效,我也不建议你去任何英雄主义者那里去实现它。 |
![]() |
2
4
使用委托构造函数,可以将其编写为:
|
![]() |
3
2
不。成员是按照声明的顺序初始化的;这是不可能的。 如果您只希望成员不在类的顶部,那么可以使用一个基:
在你的情况下,这不是必要的,因为你可以先把所有的私人物品放在第一位,然后把所有的公共物品放在第一位。但一般来说,用相同的访问说明符拆分声明是可以的,尽管很少有必要。 |
![]() |
4
0
问题是x依赖于y和z,但y和z是已知的。 可能的解决方法: (1)传入构造的x,而不是由构造函数生成。
(2)一个更疯狂的想法,(请不要这样做,它通常表示您如何考虑代码的问题)。创建默认对象,然后使用Placement New。但是,当我看到这样的代码时,它通常使用
总的来说,我认为你应该重新评估为什么x依赖于y和z,也许你还需要处理一些数据和职责。 如果x依赖于y和z的状态,那么如果它在类外部使用,您可能希望将其设置为函数,因为作为公共成员变量,其他人可以修改它,并可能从x和y取消同步。您也可能希望将y和z放在x内部。 |
![]() |
KiraHoneybee · 具有构造函数参数的模板化类 3 年前 |
![]() |
nick2225 · 隐式调用复制构造函数? 3 年前 |
![]() |
nohaga · 为什么在本例中p3需要默认构造函数? 3 年前 |
![]() |
Aadil Hoda · 为什么类类型的成员需要初始化? 3 年前 |
![]() |
EloiGG · 具有任意类型的变量的可数的C++函数 3 年前 |