我是C ++的新手,并且正在努力实现多态性。 我有一个项目,我需要一个基类(比方说硕士)和三个派生类。
class Master {
public :
virtual void run();
//Other attributes non-important for the topic
}
class Derived1 : public Master {
public:
void run();
//attributes
}
class Derived2 : public Master{
public :
Derived2(Derived1* ptr1) {ptr = ptr1;} //there comes the cause of the problem
void run();
private :
Derived1* ptr;
}
我主要想创建一个多态列表vector<Master*> poly_list;
但是问题在于该列表仅包含Master类上的指针,因此即使它可以调用正确的函数run();也是如此。我无法将Derived1的地址发送到Derived2的构造函数。
我想这样进行:
int main
{
vector<Master*> poly_list;
poly_list.push_back(new Derived1());
poly_list.push_back(new Derived2(poly_list[0]));
return 0
}
当我编译代码时,编译器告诉我它无法将构造函数的Master类型转换为Derived1。
有人能做到这一点吗?预先感谢。
答案 0 :(得分:0)
是的,在将Derived1
推入列表之前,先获取其指针:
vector<Master*> poly_list;
Derived1 *d=new Derived1();
poly_list.push_back(d);
poly_list.push_back(new Derived2(d));
另外,请不要使用原始指针,而应使用std::unique_ptr
智能指针,这样,如果忘记执行delete
,就不会泄漏内存,就像在示例中一样。 / p>