我想寫的是在一定的層次結構的任何派生類工作的功能,而無需修改抽象類的輸入參數:如何從純抽象基類引用創建對象副本?
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
請注意,這裏的問題不是關於抽象類,而是一般關於基類的引用。 –