C++多态性使用子构造函数
C++ polymorphism use child constructor
当父对象被赋予函数时,我想使用子类构造函数。
class foo {
public:
virtual void doThing() { };
};
class bar : public foo {
public:
void doThing() override;
};
class bar2 : public foo {
public:
void doThing() override;
};
int main () {
bar obj;
bar2 obj2;
someFunction(&obj);
someFunction(&obj2);
}
void someFunction(foo *obj) {
//child object construction
}
如果bar
类对象指针被传递给someFunction()
,那么它将在函数内创建新的bar
对象。与bar2
类等相同。
我的问题是:当对象的引用被给定时,有没有一种方法可以构造一个子对象?
实现这一点的典型方法是在foo中提供一个纯虚拟的"克隆"方法,然后在成员中定义它。
特别好的设计师(好的设计师是懒惰的设计师)使用奇怪的递归模板模式(CRTP)来帮助解决这个问题。
class foo { public: virtual foo* clone() const=0; virtual ~foo(){}}
template <typename Derived>
class foo_helper : public foo
{
public:
virtual foo* clone() const
{
return new Derived(static_cast<const Derived&>(*this));
}
virtual ~foo_helper(){}
}
class Bar : foo_helper<Bar>
{
public:
virtual ~Bar(){}
}
另请参阅:http://katyscode.wordpress.com/2013/08/22/c-polymorphic-cloning-and-the-crtp-curiously-recurring-template-pattern/
相关文章:
- 从基类调用函数的多态性
- C++多态性:有没有办法找到对象成员函数的地址?
- C++ 多态性:如果派生类中的虚函数在基类中声明了常量,是否需要将其声明为常量
- 如果基类指针无法访问派生类成员函数,那么多态性有什么方便的呢?
- 多态性在 lambda 函数C++不起作用
- 多态性是否适用于值?或者在按(基)值返回时使用派生类的移动构造函数
- 如何在保持多态性的同时,将成员函数添加到需要它的继承类中,而不会影响其他同级类?
- C++ 中多态性和函数重载之间的区别
- 函数模板和多态性
- C 多态性实例的构造函数和破坏者
- 多态性(C )的派生类中的超载函数
- 多态性和纯虚函数
- C++ 多态性和非虚函数
- C++多态性/虚拟函数在此不起作用
- 如果重载函数仅被部分重写,则多态性不起作用
- 多态性不适用于相同数据类型(Base和Inherited类)的函数返回值
- 具有引用数据类型的函数多态性
- C++多态性使用子构造函数
- 模板函数多态性
- 基类和派生类构造函数多态性问题