c++ - 虚拟类 C++ 和继承
问题描述
为什么我不能从 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();
}
解决方案
你错过了矩形参数:
Rectangle rec(10, 5);
Shape *p = &rec;
p->shapeName();
以同样的方式
p = new Rectangle(); // Won't work: No default constructor.
推荐阅读
- html - 如何减小屏幕宽度并在css中放置导航词之间的间距
- architecture - 带闪屏的BottomNavigationView(架构导航组件)
- java - WebSocket connection can't reconnect after some time
- javascript - CSV 解析器文档
- callback - 保存到 GDrive 时的 Keras 历史顺序问题
- python - 是否可以使用响应散景服务器命令的散景小部件 DIV 创建元素?
- javascript - 仅在特定路线中使用 multer
- vue.js - Vuejs变量未显示在模态上
- json - 数组中的数组 Swift 4 Json
- vb.net - 使用嵌套递归算法 vb.net 显示所有多个解决方案