C++设计:如何在C++中设计“可以执行或可以”的关系

Posted

技术标签:

【中文标题】C++设计:如何在C++中设计“可以执行或可以”的关系【英文标题】:C++ Design: how to design the "can perform or can be " relationship in C++ 【发布时间】:2014-07-14 17:44:16 【问题描述】:

我是 C++ 设计编程的新手。我在如何设计我的代码时遇到了一些问题。 我有一个名为 A 的类,它包含一个数组和一些基本的数组函数,例如 set、get 和 print。我还想再有一个用于排序之类的功能。但是,我希望能够提供选择类型的功能。例如:

a.sort.quick()

a.sort.merge()

我怎样才能做到这一点,还有其他更好的方法吗?

【问题讨论】:

通常容器没有这样的算法,通常算法和容器是分开的,一起工作,其中算法有一个函数接口,而容器是一个参数(或两个迭代器)。 你的意思是Sort类应该是不同的,因为我们可以定义不同的不同算法,它可以接受一个通用参数来排序。? 我的意思是喜欢std::sort(a.begin(), a.end()) 感谢 Mooing.than 如何提供选择算法的功能。将另一个参数传递给类型或任何其他更好的方式的排序函数是编写设计吗? sorts::mergesort(a.begin(), a.end()), sorts::quicksort(a.begin(), a.end())? 【参考方案1】:

实现这一点的最佳方法是拥有一个包含这些方法的类,并创建这些类的实例。例如:

class Sort 
    public:
        sortMethodA() 
        sortMethodB() 
        // etc...
;

class A 
    public:
        Sort sort;
;

A a;
a.sort.sortMethodA();

编辑:你也可以做类似的东西:

a.sort(QUICK);

意味着你可以有一个枚举并根据你传递的内容进行排序

【讨论】:

但是如果数组是A类的成员并且也是私有的,如何将它传递给排序?类排序的数据成员是什么?请多多包涵 不要像我一样把它放在课堂之外,而是让 Sort 进入课堂 A 你的意思是把类排序定义为A类的子类。

以上是关于C++设计:如何在C++中设计“可以执行或可以”的关系的主要内容,如果未能解决你的问题,请参考以下文章

C++中设计三种不同继承方式的意义

用C++设计一个三角形类

如果我正在设计一个应该搜索标签/列的应用程序,我将如何在 Bigtable 中设计一个行键?

如何在HTML中设计<hr>即水平线的颜色??

如何复制故事板中设计的 UIView?

如何在HTML中设计水平线的颜色?