1
我在嘗試從指向其基類的指針創建類的副本時遇到了一些麻煩。如何從基類指針複製繼承類而不拼接?
#include <iostream>
#include <vector>
class Base {
public:
Base() { }
virtual void test() { std::cout << "I am just the base class\n"; }
};
class First : public Base {
public:
First() { }
void test() { std::cout << "This is the First class\n"; }
};
class Second : public Base {
public:
Second() { }
void test() { std::cout << "This is the Second class\n"; }
};
int main() {
First *f = new First();
Second *s = new Second();
// First, I keep a vector of pointers to their base class
std::vector<Base *> ptrs;
ptrs.push_back(f);
ptrs.push_back(s);
ptrs[0]->test(); // Properly calls the implemented virtual class by inheritor
ptrs[1]->test(); // Properly calls the implemented virtual class by inheritor
// Now, I want to *copy* the class without it being spliced to just the base class
// from the ptrs vector (not from 'f')
First *f2 = new First(*ptrs[0]);
}
我最終得到的錯誤是::
test.cpp: In function ‘int main()’:
test.cpp:35: error: no matching function for call to ‘First::First(Base&)’
test.cpp:12: note: candidates are: First::First()
test.cpp:10: note: First::First(const First&)
有沒有什麼辦法來施放此指針複製完整的反對,而不僅僅是基類最好是通過這個例子說明?或者我需要存儲一個指向繼承者的指針來完成這個工作?