泛型编程

语法基础:

//template关键字告诉c++编译器,现在我要进行泛型编程,

//typename 告诉c++编译器,T为数据类型,,,请你不要乱报错。。。。。

//T为数据类型,T为数据类型参数化,而已。。。。。int char double 

template<typename T>

void myswap3(T &a, T &b)

{

T t = a;

a = b;

b = t;

};

void main()

{

//泛型编程函数的使用方法有2

int x = 1;

int y = 2;

//自动类型推导,,

//myswap3(x, y);

 

//具体类型调用

myswap3<int>(x, y);

 

char c1 = 'a';

char c2 = 'b';

myswap3<char>(c1, c2);

system("pause");

}

 

函数模板可以像普通函数一样被重载

2 C++编译器优先考虑普通函数

如果函数模板可以产生一个更好的匹配,那么选择模板

可以通过空模板实参列表的语法限定编译器只通过模板匹配

 

函数模板不允许自动类型转化,普通函数能够进行自动类型转换

#include <iostream>
using namespace std;

int Max(int a, int b)
{
    cout<<"int Max(int a, int b)"<<endl;
    return a > b ? a : b;
}

template<typename T>
T Max(T a, T b)
{
    cout<<"T Max(T a, T b)"<<endl;
    return a > b ? a : b;
}

template<typename T>
T Max(T a, T b, T c)
{
    cout<<"T Max(T a, T b, T c)"<<endl;
    return Max(Max(a, b), c);
}

void main()
{
    int a = 1;
    int b = 2;

    cout<<Max(a, b)<<endl;
    cout<<Max<>(a, b)<<endl;

    cout<<Max(3.0, 4.0)<<endl;

    cout<<Max(5.0, 6.0, 7.0)<<endl;

    cout<<Max('a', 100)<<endl;

    system("pause");
    return ;
}

 

类模板语法基础

//类模板的创建

//类中的属性,,类型参数化

 

//我们把数据类型,进一步 抽象化。。。

 

//抽象化的数据类型,不能直接使用。。

 

 

posted @ 2016-11-07 11:32  ren_zhg1992  阅读(136)  评论(0)    收藏  举报