64,639
社区成员
发帖
与我相关
我的任务
分享
// 用条件语句实现:
enum SortStrategy{ BUBBLE_SORT, QUICK_SORT }; // 冒泡排序和快速排序
// 这里用了if,也可以用switch
void Sort(SortStrategy strategy)
{
if (strategy == BUBBLE_SORT)
... // 实现BubbleSort()
if (strategy == QUICK_SORT)
... // 实现QuickSort()
}
// 实际使用
int main()
{
SortStrategy s = BUBBLE_SORT;
Sort(s);
}
// 继承实现:
class Sorter
{
public:
virtual Sort() = 0;
}
class BubbleSorter : public Sorter
{
public:
virtual Sort() { ... }; // 实现BubbleSort()
}
class QuickSroter : public Sorter
{
public:
virtual Sort() { ... }; // 实现QuickSort()
}
void Sort(Sorter &s)
{
s.Sort();
}
// 实际使用
int main()
{
BubbleSoter s;
sort(s);
}
// sort.h
enum SortStrategy{ BUBBLE_SORT, QUICK_SORT };
void sort(SortStrategy);
// sort.cc
void sort(SortStrategy strategy)
{
if ( strategy == BUBBLE_SORT )
BubbleSort();
if ( strategy == QUICK_SORT )
QuickSort();
)
// sort_strategy.h
void BubbleSort();
void QuickSort();
// sort_strategy.cc
void BubbleSort() { ... }
void QuickSort() { ... }
// another project:
#include "sort_strategy.h"
int main()
{
QuickSort();
}
// sorter.h
class sorter{ ... };
class BubbleSorter : public Sorter { ... }
...
// another project:
#include "Sorter.h"
int main()
{
QuickSorter s;
s.sort();
}
// sort.h
enum SortStrategy{ BUBBLE_SORT, QUICK_SORT,SORT_3 }
// sort.cc
void Sort(SortStrategy strategy)
{
if (strategy == BUBBLE_SORT)
...
if (strategy == QUICK_SORT)
...
if (strategy == SORT_3)
...
}
// sorter.h,添加一个新的派生类:
class Sorter_3 : public Sorter
{
public:
Sort() { ... }; // 实现可能在sorter.cc中完成。
}
if (strategy == BUBBLE_SORT)
BubbleSort(); // BubbleSort()在其他地方实现。
或者:
// 函数指针数组
SortTable[BUBBLE_SORT](); // 相信大家都看得懂,不详细解释了。
// 原有代码:
int main()
{
SortStrategy s = BUBBLE_SORT;
Sort(s);
}