我想写的是在一定的层次结构的任何派生类工作的功能,而无需修改抽象类的输入参数:如何从纯抽象基类引用创建对象副本?
class A {
public:
A(int val): m_i(val) { }
virtual void add(int i) = 0;
int m_i;
};
class B: public A {
public:
B(int val): A(val) { }
B(): A(0) { }
virtual void add(int i) { m_i += i; }
};
class C: public A {
public:
C(int val): A(val) { }
C(): A(0) { }
virtual void add(int i) { m_i += i*2; }
};
int f(const A& base_class)
{
// how to create a concrete copy of class base_class?
base_class.add(5);
}
这里F()应为B和C的工作,但我可以” t创建具体类的副本,因为我不知道实际类型,除非使用dynamic_cast。
是否有另一种方法来解决这个问题或应该只使用dynamic_cast?
为什么F()需要做一个副本? – andre
请注意,这里的问题不是关于抽象类,而是一般关于基类的引用。 –