C ++ - 几何图元类层次结构

时间:2015-12-03 12:14:28

标签: c++ encapsulation data-hiding

我是C ++的新手,我想参与我的第一个教程。

我想编写一个程序,该程序将在表示图形符号的对象列表上实现搜索。

列表包含由两个边长度描述的矩形和由半径描述的圆。

我还想创建一个搜索过程,它接受列表和矩形边长,并返回另一个列表,其中只包含适合给定矩形的符号。

列表(和搜索功能)的实现应该允许 扩展接受的符号列表(例如添加多边形)而不进行修改 任何现有的代码。

我应该遵循什么样的方法?你能给我一个与我的目标相似的例子吗?

1 个答案:

答案 0 :(得分:2)

这是多态的用途 - 您将拥有import web class hello: def GET(self, name): return 'Hello' urls = ('/Hello(.*)', 'hello') app = web.application(urls, globals()) app.run() std::vector<Object*>来保存对象列表。

对象应该基本上如下所示:

std::vector<std::shared_ptr<Object>>

当然class Object { public: virtual ~Object() = default; // needs to be implemented by deriving classes i.e. Rectangle and Circle virtual bool fitsIn(Rectangle const& r) const = 0; }; Rectangle会从中继承:

Circle

然后你就可以将它添加到列表中,遍历并在每个元素上调用class Rectangle : public Object { int x, y, w, h; public: Rectangle(int x, int y, int w, int h) : x(x), y(y), w(w), h(h) {} virtual bool fitsIn(Rectangle const& r) const override { // return whether can fit in r based on this object's and r's x, y, w and h } }; ,根据fitsIn返回的内容将其推送到另一个向量:

fitsIn