#include <iostream>
using namespace std;
class Shape
{
public:
virtual void draw()=0;
};
class Circle:public Shape
{
public:
void draw(){cout<<"circle "<<endl;}
};
class Rectangle:public Shape
{
public:
void draw(){cout<<"Rectangle "<<endl;}
};
Run Code Online (Sandbox Code Playgroud)
我想创建一个Picture类,我可以在其中绘制不同的形状.我在Picture类构造函数中传递Shape类指针(Abstract),如下所示:
class Picture
{
public:
Shape* s1;
Picture(Shape *fp): s1(new Shape){}
void PictureDrawn()
{
s1->draw();
}
};
int main()
{
Circle cir;
Picture pic(cir);
pic.PictureDrawn();
Run Code Online (Sandbox Code Playgroud)
}
我收到编译错误.请任何人都可以解释如何正确编写Picture类构造函数,以便我可以制作不同的形状?谢谢
你不能这样做
new Shape
Run Code Online (Sandbox Code Playgroud)
这是一个实例化抽象类的尝试.我想你想要做的是:
Picture(Shape *fp): s1(fp){}
Run Code Online (Sandbox Code Playgroud)
这会将参数赋值给s1变量,我认为这是你想要的.
另请注意,底部的代码也不正确.您已将Picture构造函数声明为获取指向Shape的指针,但随后您将传递Circle by值.你想要的是什么.
Circle cir;
Picture pic(&cir);
Run Code Online (Sandbox Code Playgroud)
或者,更改Picture类,以便它使用引用而不是指针.
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |