|
1
0
组件可以具有一个参数初始化m_地址的构造函数。 |
|
|
2
0
如果这个通用功能以任何方式依赖于专用组件、专用组件2的状态,或者依赖于它是专用组件或专用组件2的事实,那么您不能在组件的构造函数中真正执行它,除非您向它传递参数。有时将类型标识符传递给组件构造函数以在那里进行此类初始化是必要的。 但是,在这种情况下,可以创建派生类可以调用的虚拟函数。但是,假设您将此虚拟函数调用放在专用组件构造函数中。如果以后从这个(超专用组件)派生出一个更进一步的类,并且重写这个虚拟函数,那么从SpecialzedComponent构造函数进行的调用甚至不会达到这个目的。道德:不要从构造函数调用虚函数。 我认为最干净的方法是进行两阶段建设。一个对对象进行基本连接的构造函数和一个必须在使用它之前调用的init()方法。客户端代码(componentholder?)无法在所有对象完全构造后调用此init。 |
|
|
3
0
为什么start()方法需要是虚拟的? 可以使其非虚拟化并实现派生的构造函数 这样地:
这比在对象完全 构造,因为两步构造容易出错。(如果你这样做了 需要两步施工,考虑工厂(或工厂方法)来 确保只存在完全构造的对象。建造师 私人和工厂(方法)是朋友。) 另一种方法是将地址的计算移出 对象构造。这将导致如下代码:
这种方法提高了派生的 专用组件,因为它消除了对 参数文件。 为了方便起见,可以向实例提供静态工厂方法 您的专业组件:
顺便说一句:考虑在组件文件夹中保存共享指针,而不是原始指针。 |