跟我一起透彻理解template模板模式

#include <iostream>using namespace std;//template模式。class Base{public:void DealWhat(){this->Printf1();this->Printf2();}protected:() = 0;virtual void Printf2() = 0;//让子类实现算法的具体实现。};class Son1 : public Base{public:void Printf1(){cout << “Son1::Printf1()” << endl;}void Printf2(){cout << “Son1::Printf2()” << endl;}};class Son2 : public Base{public:void Printf1(){cout << “Son2::Printf1()” << endl;}void Printf2(){cout << “Son2::Printf2()” << endl;}};int main(){Base *b = new Son2();b->DealWhat();return 0;}

感悟: 基类的方法由不同子类去具体实现,我们需要什么具体的算法 或者算法,直接构造相关的子类就可以使用,但是公共接口还 是定义在基类中,这样方便所有的子类都可以利用C++多态机制进行覆盖改写。 下面是我的具体事例详解:

#include <iostream>using namespace std;//template模式。class Base{public:Base(int a[],int n){data = new int[n];int i = 0;for (; i < n; i++){data[i] = a[i];}size = n;}void Printf(){int i = 0;for (; i < size; i++){cout << data[i] << ” “;}cout << endl;}void DoWhat(){this->sort();//算法的具体实现交给不同的子类来实现,,我们通过共有的接口来调用。}protected:() = 0;//排序方法的实现。int *data;int size;};class Bubble : public Base//冒泡排序。{public:Bubble(int a[], int n) :Base(a, n){}void sort(){int i = 0;int temp;for (; i < size; i++){for (int j = 0; j<(size-i-1); j++){if (data[j+1]<data[j]){temp = data[j];data[j] = data[j+1];data[j+1] = temp;}}}}};class Insert : public Base//插入排序。{public:Insert(int a[], int n) :Base(a, n){}void sort(){int i = 0;int j;int k;int temp;for (; i < size; i++){j = i;temp = data[i];for (k = 0; k <= i; k++){if (data[k]>temp){break;}}for (; j > k; j–){data[j] = data[j – 1];}data[j] = temp;}}};class Qulick : public Base//快速排序。{public:Qulick(int a[], int n) :Base(a, n){}void sort(){sort(data,0,size);}private:void sort(int a[], int low, int high){int i = -1;int j = 0;if ( low>=high )return;int key = data[high-1];int temp;while (j<high){while (data[j]>key)j++;i++;temp = data[i];data[i] = data[j];data[j] = temp;j++;}data[i] = key;sort(a,0,i-1);sort(a,i+1,high);}};class Select : public Base//选择排序。{public:Select(int a[], int n) :Base(a, n){}void sort(){int i = 0;int j;int temp;for (; i < size – 1; i++){for (j = i + 1; j < size; j++){if (data[i]>data[j]){temp = data[i];data[i] = data[j];data[j] = temp;}}}}};int main(){int a[] = { 4, 6, 7, 9, 1, 23, 4 };/*Base *p = new Qulick(a, 7);p->DoWhat();p->Printf();//插入排序。*/Base *p = new Bubble(a,7);p->DoWhat();p->Printf();;}

最美不过偷瞄你是你忽然转头,看见你的微笑

跟我一起透彻理解template模板模式

相关文章:

你感兴趣的文章:

标签云: