Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
593 views
in Technique[技术] by (71.8m points)

c++ - Why is inherited member not allowed?

I'm beginner to C++ and I'm doing one of the exercises about abstract class and inheritance.

This is my abstract class:

#ifndef   SHAPE_H 
#define  SHAPE_H
class Shape
{
    public:
        virtual void area();
        virtual void perimeter();
        virtual void volume();
};
#endif

This is my concrete class that implements the abstract class:

#include <iostream>
#include <cmath>
#include "Shape.h"
using namespace std;

class Circle : public Shape
{
    public:
        Circle(int);
    private:
        int r;
};

Circle::Circle(int rad)
{
    r = rad;
}

void Circle::area()
{
    cout << "Area of this cirle = " << 3.14 * pow(r, 2) << endl;
}

void Circle::perimeter()
{
    cout << "Perimeter of this cirle = " << 2 * 3.14 * r << endl;
}

void Circle::volume()
{
    cout << "Volume is not defined for circle." << endl;
}

I got red lines under area(), perimeter(), and volume() in my Circle class, which showed "Error: inherited member is not allowed". I went through my class ppt and googled for answer but no luck. Any help is appreciated.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

class Circle : public Shape
    {
    public:
        Circle(int);
        virtual void area(); // overrides Shape::area
        void perimeter();    // overrides Shape::perimeter
        virtual void volume();
    private:
        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
{
public:
    virtual ~Shape() {}
    virtual void area() = 0;
    virtual void perimeter() = 0;
    virtual void volume() = 0;
};

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...