I'm trying to implement a class Union
which inherits directly from the class Shape
(Union
is a shape composed of multiple shapes).
The (protected) constructor of Shape
takes a Point
as input (representing the center of the shape). To construct a Union
object, the only input is a list of shapes (const vector<const Shape>
). To implement the constructor of Union
, I wanted to use an initialization list, as detailed herebelow
class Union : Shape
{
public:
Union(const std::vector<const Shape> shapes):
Shape(shapes[0].get_center()), shapes(shapes) {};
...
private:
const std::vector<const Shape> shapes;
}
with get_center()
a protected virtual function of class Shape
.
class Shape
{
protected:
Shape (const Point& center) : center(center) {};
virtual const Point& get_center() const =0;
...
private:
const Point center;
}
However, when I call get_center()
in the initialization list of Union
constructor, there is an error saying that "get_center() is a protected member of Shape
".
Can someone explain me why I cannot call get_center()
from the subclass Union
(which should have inherited the function) ?
Thank you!
P.S.: If I set the function get_center()
to public, there is no error anymore.