Why is inherited member not allowed?

You have to declare the over-ridden functions as part of your class definition

class Circle : public Shape
        virtual void area(); // overrides Shape::area
        void perimeter();    // overrides Shape::perimeter
        virtual void volume();
        int r;

Note that the use of virtual here is optional.

As n.m. noted, you should also include a virtual destructor in Shape. You may also want to make its virtual functions pure virtual (based on your comment about Shape being abstract)

class Shape
    virtual ~Shape() {}
    virtual void area() = 0;
    virtual void perimeter() = 0;
    virtual void volume() = 0;

Leave a Comment