我知道:
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();
}
您错过矩形参数:
Rectangle rec(10, 5);
Shape *p = &rec;
p->shapeName();
以相同方式
p = new Rectangle(); // Won't work: No default constructor.