c++ 将构造函数虚化,动态产生对象
我们知道构造函数有一个必须遵守的规则,即构造函数不能定义为虚函数。但有一个具体的应用是要求是在不同的场景下通过一个指针或者引用生成不同的对象,这就类似于类型的动态生成,即在执行期才能确定具体的对象。这怎么实现呢?
下面我们介绍两种方法:
1.不管是在effective c++ 还是在设计模式中,提到的一种特别的替代继承的方法,即组合。采用组合的方法来实现构造函数虚化的功能。具体实现方式为:
object:object(const base& rhs) { for(list<base*>::const_iterator it=rhs.components.begin();it!=rhs.components.end();it++) { components.push_back((*it)->clone());//将具体的base的子类对象加到components list尾端 }}