【发布时间】:2017-09-21 12:17:00
【问题描述】:
我有一个关于复制多态对象的问题。我的出发点是如何实现克隆功能的常见示例:
#include <iostream>
class Base
{
protected:
int a;
public:
void set_a(int x) { a = x; }
void get_a() { std::cout << a << "\n"; }
virtual ~Base() {}
virtual Base *clone() const = 0;
};
class Derived : public Base
{
public:
virtual Derived *clone() const
{
return new Derived(*this);
}
};
int main(int argc, char *argv[])
{
Base *ptr = new Derived;
ptr->set_a(20);
ptr->get_a();
Base *cpy = ptr->clone();
cpy->get_a();
}
为什么new Derived(*this) 行会导致this 的复制?是不是因为我们用this 作为参数调用Derived 的复制构造函数?
如果我们确实调用了Derived的复制构造函数,那么为什么下面的代码编译不出来:
Base *b = new Derived(ptr); //does not compile
【问题讨论】:
-
ptr是Base*类型,为什么new Derived(ptr);应该编译? -
复制构造函数,根据定义,复制同一类的实例。
ptr不是同一类的实例。
标签: c++ oop polymorphism