模板

    技术2022-07-10  130

    模板参数化多态,就是将程序所处理的对象的类型参数化,使得一段程序可以用于处理多种不同类型的对象。

    两个函数只有参数类型不同,功能完全相同(函数体一样)。如果能写一段通用代码,能适合多种不同数据类型,便会使代码的可重用性大大提高,从而提高软件的开发效率。使用函数模板可以实现这一目的。

    程序员只需要对函数模板编写一次,然乎基于调用函数时提供的参数类型,C++编译器将自动产生相应的函数来正确处理该类型的数据。

    #include <cstdio> #include <iostream> #include <cmath> #include <cstring> using namespace std; template<typename S> void show(S* arry, int count) { for(int i=0; i<count; i++) { cout << arry[i] << " "; } cout << endl; } template<typename T> void sort(T* arry,int count) { int temp =0; for(int i=0; i< count-1; i++) { for(int j=0; j<count -i-1; j++) { if(arry[j] >arry[j+1]) 冒泡法 { temp =arry[j]; arry[j] =arry[j+1]; arry[j+1] =temp; } } } } int main() { int ac[]={2, 3,4,1, 6, 10, 9, 11, 14, 1}; show(ac,sizeof(ac)/sizeof(ac[0])); sort(ac,sizeof(ac)/sizeof(ac[0])); show(ac,sizeof(ac)/sizeof(ac[0])); double ae[] ={2.3, 9.6, 5, 10.2, 100, 18, 26, 50}; show(ae,sizeof(ae)/sizeof(ae[0])); sort(ae,sizeof(ae)/sizeof(ae[0])); show(ae,sizeof(ae)/sizeof(ae[0])); return 0; }

    else

    复数的运算符重载:比较大小排序(根据模的大小) (部分)

    bool operator>(Complex& a,Complex& b) { float tempa =sqrt((a.r)*(a.r) +(a.v)*(a.v)); float tempb =sqrt((b.r)*(b.r)+ (b.v)*(b.v)); if(tempa >=tempb) { return true; } else { return false; } } ostream& operator<<(ostream& os,const Complex& c) { int r =c.r; int v =c.v; if(r ==0) { printf("%di", v); } else if(v ==0) { printf("%d", r); } else if( v< 0) { printf("%d%di",r,v); } else { printf("%d+%di",r,v); } return os; } void showcp(Complex* arry,int b) { for(int i=0; i< b; i++) { cout<< arry[i] << " "; } cout << endl; } int main() { Complex p1(1,2),p2(1,1),p3(-2,-4),p4(6,4); Complex*ai =new Complex[4]; ai[0] =p1; ai[1] =p2; ai[2] =p3; ai[3] =p4; sort(ai,4); showcp(ai,4); return 0; }
    Processed: 0.010, SQL: 9