虚拟类C ++和继承

问题描述 投票:-2回答:1

为什么我不能从Rectangle创建对象?

我知道:

Shape *p;
p = new Rectangle(10,5);

可以使用,但我不明白为什么我不能创建如下所示的内容:

Shape *p;
Rectangle rec;  
p = &rec;

p->shapeName();

我得到的错误是这样:

没有匹配函数来调用'Rectangle :: Rectangle()'

这是我的最小示例:

#include <iostream>

using namespace std;

class Shape {
protected:
    double area, perimeter;

public:
    virtual void shapeName() = 0;
    virtual void shapeArea() = 0;
    virtual void shapePerimeter() = 0;

    double getArea()
    {
        return area;
    }

    double getPerimeter()
    {
        return perimeter;
    }
};

class Rectangle : public Shape {
    double height, width;

public:
    Rectangle(double height, double width)
        : height(height)
        , width(width)
    {
    }

    void shapeName()
    {
        cout << "Rectangle" << endl;
    }
    void shapeArea()
    {
        area = height * width;
    }
    void shapePerimeter()
    {
        perimeter = 2 * (height + width);
    }
};

int main()
{

    Shape* p;
    Rectangle rec;
    p = &rec;

    p->shapeName();
}
c++ object virtual shapes
1个回答
5
投票

您错过矩形参数:

Rectangle rec(10, 5);  
Shape *p = &rec;

p->shapeName();

以相同方式

p = new Rectangle(); // Won't work: No default constructor.
© www.soinside.com 2019 - 2024. All rights reserved.