这里的简单问题。我必须定义包含书籍,电影,CD的类。我用所有常用方法定义了一个模板类,比如说Set<T>
,然后定义了从Set
类
class Movies_set : public Set<Movie>
{
/* ... */
}
其中我定义了一些其他方法(比如搜索actor的函数)。这是一种很好的编程技术还是有更方便的方法?
答案 0 :(得分:3)
这取决于Set究竟是什么。我怀疑Set是类似于std :: set的东西,在这种情况下,我建议不要推导并引导你走向作曲。
从Set派生的原因是一个坏主意,因为它暴露了set的API,它与MovieSet无关。如果您需要对MovieSet对象进行搜索的方法,请在MovieSet本身上实现它们,特别是因为正如您所指出的那样,您将增加MovieSet的界面。
通过这种方式,您还可以获得非常强大的功能:封装。如果由于某种原因您决定从Set更改为std :: map,则基类的接口可能会更改,并且访问MovieSet的任何代码都将受到影响。如果您已将Set存储为私有数据成员,则不会遇到此问题,因为您已经定义了MovieSet的相应访问者。
当然,如果基于我的前提,Set实际上只是一个容器。
答案 1 :(得分:0)
这样做绝对没有错,这是一个很常见的习语。也就是说,您可能希望确保typedef
足够了。如果您的Movies_set
没有添加新的特定功能,那么最好:
typedef Set<Movie> Movies_Set;
显然,如果Movies_set引入了与电影相关的特定功能,那么继承是最佳选择。
答案 2 :(得分:0)
答案 3 :(得分:0)
如果Movie_set没有添加任何Set的实现,那么从Set
派生的时间就浪费了你最好输入它。
typedef Set<Movie> movie_set;
像那样。但是,如果你专门使用新的成员函数和数据成员进行进一步设置,那么这是好的,尽管从容器派生并不常见(通常你拥有它们)。但是,只要必要的功能是虚拟(析构函数),它应该没问题。