![](/img/trans.png)
[英]C++ overload virtual function in abstract class with abstract class reference parameter not working
[英]object of an abstract class c++ as a parameter to a function
我有以下代码:
class Region {
public:
virtual Region* clone() const = 0;
virtual ~Region() {}
bool contains(double x, double y) const = 0;
}
class UnionRegion : public Region {
shared_ptr<Region> r1;
shared_ptr<Region> r2;
public:
UnionRegion(const Region& r1, const Region& r2) :
r1(r1.clone()), r2(r2.clone()) {}
.
.
.
}
Region
是一个抽象类。 我不明白UnionRegion
的ctor如何接收Region
类型的对象,因为我们如何创建抽象类的对象?
另外,将shared_ptr
保留到Region
什么意义? 我知道,因为Region
是抽象的,我们需要一个指针,但是Region
甚至没有私有成员,因此基本上我无法使用该指针。
谢谢!
Region
是一个抽象类,但从未实例化。 所述的参考const Region
结合的任何亚类的一个对象Region
(就像一个指针const Region
会)。 因此, UnionRegion
的构造函数将引用作为Region
子类的任何两个对象。
由于UnionRegion
从Region
继承,因此可以使用其他UnionRegion
参数或从Region
继承的任何其他类类型来调用UnionRegion(const Region& r1, const Region& r2)
。 由于这是一个构造函数,因此我假设可能还有其他一些类类型,这些类从Region
继承并用于构造UnionRegion
。
我们如何创建抽象类的对象?
您不能创建抽象类的对象,只能使用抽象类引用/指针来引用派生的具体类对象。
将shared_ptr保留到Region有什么意义?
如果要使用其具体类型未知的类成员,则必须使用指针或引用来保存它。 然后,您可以调用覆盖虚拟函数以具有多态操作。
需要协商的是:为什么作为派生类型的UnionRegion需要持有指向其基址的指针(shared_ptr)? 它更像是设计行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.