当前位置:编程学习 > C/C++ >>

从汇编的眼光看C++(之泛型编程)

 

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

 

 

    泛型编程其实不难。本质上说,泛型编程就是让通用的算法应用到所有的数据类型。具体来说,int是我们熟悉的整数类型。那么一般情况下,如果我们写一个int整数的排序算法,应该怎么写呢?大家可以自己试试?下面的代码是我的一个范例;

void bubble_sort(int array[], int length) 

    int temp = 0; 

    int outer = 0; 

    int inner = 0; 

    assert(NULL != array && 0 != length); 

 

    for(outer = length -1; outer >= 1; outer --) 

    { 

        for(inner = 0; inner <= outer; inner ++) 

        { 

            if(array[inner] > array[inner + 1]) 

            { 

                temp = array[inner]; 

                array[inner] = array[inner + 1]; 

                array[inner + 1] = temp; 

            } 

        } 

    } 

 

    return; 

void bubble_sort(int array[], int length)

{

       int temp = 0;

       int outer = 0;

       int inner = 0;

       assert(NULL != array && 0 != length);

 

       for(outer = length -1; outer >= 1; outer --)

       {

              for(inner = 0; inner <= outer; inner ++)

              {

                     if(array[inner] > array[inner + 1])

                     {

                            temp = array[inner];

                            array[inner] = array[inner + 1];

                            array[inner + 1] = temp;

                     }

              }

       }

 

       return;

}   如果把数据类型改成通用的数据类型,你需要做什么呢?两个:(1)算术符"="重载;(2)比较函数。下面就是一个设计的class类型。

class type 

    int data; 

public: 

    type(int value = 0): data(value) {} 

    type(type& t) {data = t.get_data();} 

    ~type() {} 

    type& operator=(type& t) {data = t.get_data(); return *this;} 

    int get_data() {return data;} 

}; 

class type

{

       int data;

public:

       type(int value = 0): data(value) {}

       type(type& t) {data = t.get_data();}

       ~type() {}

       type& operator=(type& t) {data = t.get_data(); return *this;}

       int get_data() {return data;}

};    那么,比较函数呢?我们可以用一个全局函数代替。

int type_compare(type& t1, type& t2) 

    return t1.get_data() > t2.get_data() ? 1 : 0; 

int type_compare(type& t1, type& t2)

{

       return t1.get_data() > t2.get_data() ? 1 : 0;

}    至此所有的函数都已经修改好了,那么bubble_sort的函数也要修改吧,我们看看应该怎么做?

template <typename data> 

void bubble_sort(data array[], int length, int (*compare)(data& , data& )) 

    data temp; 

    int outer = 0; 

    int inner = 0; 

    assert(NULL != array && 0 != length); 

 

    for(outer = length -1; outer >= 1; outer --) 

    { 

        for(inner = 0; inner <= outer; inner ++) 

        { 

            if(compare(array[inner], array[inner+1])) 

            { 

                temp = array[inner]; 

                array[inner] = array[inner + 1]; 

                array[inner + 1] = temp; 

            } 

        } 

    } 

 

    return; 

template <typename data>

void bubble_sort(data array[], int length, int (*compare)(data& , data& ))

{

       data temp;

       int outer = 0;

       int inner = 0;

       assert(NULL != array && 0 != length);

 

       for(outer = length -1; outer >= 1; outer --)

       {

              for(inner = 0; inner <= outer; inner ++)

              {

                     if(compare(array[inner], array[inner+1]))

&nb

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,