您的位置:首页 > 编程语言 > C语言/C++

C++、C#、JAVA中模板与泛型

2013-05-09 16:26 281 查看
对于C++,泛型也叫做模板。

声明与定义泛型类: public template<class T> class TestClass{};

声明与定义泛型方法: public template<class T> void TestFunc(T t1, T t2){}

成员函数的模板声明与普通函数的模板声明一样只不过在定义的时候有点区别,如果是在类里面定义成员函数那就跟普通函数一样,但是如果是在类外面定义,那就有区别了,具体如下:

定义成员函数:如果类自己也声明了模板那么定义格式是:template<class C> template<class T> void TestClass::innerFunc(T t1, T t2){}

其中template<class C>是类前面声明的模板类型

C++同时还支持特化模板,意思就是在声明模板函数的时候同时就讲模板实例化了具体如下:

特化类模板格式:template<> class TestClass<string>{}这样就特化了一个String型的类模板

特化函数模板格式:template<> void func<string>(stringstr1, stringstr2){}这样就特化了一个String型的函数模板

对于模板的使用如下:

声明模板类的实例对象 TestClass<string> tc1,TestClass<int> tc2等等。。。

调用模板函数:func(20,50)//调用的是func(int, int),func("hello","world")//调用的是func(string, string)等等

如果模板函数的返回值类型也是一个模板类型则需要这样子调用:func<int>(30,50)//调用的函数将返回int类型,func<string>("hello","world")//调用的函数将返回int类型

下面就是JAVA中的泛型了,JAVA的泛型就比C++简单多了

JAVA中定义泛型类:class TestClass<T> {};

JAVA中定义泛型方法:public <T> T void func(T t1, T t2){}

JAVA中泛型的上限与下限:public <T extends String> T void func(T t1, T t2){}定义下限泛型方法,意思T至少是String类型的或者是String类型的子类

public <T super String> T void func(T t1, T t2){}定义上限泛型方法,意思T只能是String类型或者是String类型的父类

JAVA泛型中的通配符:public void func<?>(){}当调用这个方法时,JVM会自动帮我们去匹配这个”?“在调用是具体是社呢类型

JAVA中使用泛型的方法与C++几乎一模一样,只是在对于讲泛型类型作为函数返回类型时,JAVA不需要func<int>(30,50);的方法调用,而是跟普通的函数一样是通过func(30,50)调用即可。

最后就是C#部分,C#部分跟JAVA是一样的,没有什么太大的区别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: