要让子类返回自身的副本,而不是继承的父类,可以通过以下方式实现:
以下是一个示例代码:
#include <iostream>
class Parent {
public:
virtual Parent* clone() const {
return new Parent(*this);
}
};
class Child : public Parent {
public:
virtual Child* clone() const override {
return new Child(*this);
}
};
int main() {
Parent* parent = new Child();
Parent* clone = parent->clone();
std::cout << "Type: " << typeid(*clone).name() << std::endl;
delete parent;
delete clone;
return 0;
}
在上述示例中,父类Parent
定义了一个虚函数clone()
,返回类型为Parent*
。子类Child
重写了该虚函数,并返回类型为Child*
。在main()
函数中,创建了一个子类对象Child
,并将其赋值给父类指针Parent*
。然后调用clone()
函数,返回的是子类对象的副本,而不是父类对象的副本。最后输出了副本对象的类型。
请注意,这只是一种实现方式,具体的实现方法可能因编程语言和具体情况而异。
领取专属 10元无门槛券
手把手带您无忧上云