我知道:
Shape *p;
p = new Rectangle(10,5);
Run Code Online (Sandbox Code Playgroud)
会工作,但我不明白为什么我不能像下面这样创建:
Shape *p;
Rectangle rec;
p = &rec;
p->shapeName();
Run Code Online (Sandbox Code Playgroud)
我得到的错误是这样的:
没有用于调用 '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();
}
Run Code Online (Sandbox Code Playgroud)
你错过了矩形参数:
Rectangle rec(10, 5);
Shape *p = &rec;
p->shapeName();
Run Code Online (Sandbox Code Playgroud)
以同样的方式
p = new Rectangle(); // Won't work: No default constructor.
Run Code Online (Sandbox Code Playgroud)