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是一样的,没有什么太大的区别。
声明与定义泛型类: 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是一样的,没有什么太大的区别。
相关文章推荐
- C#和Java的泛型、C++模板、C#的constraints特性以及弱类型化和强类型化的问题(转)
- C++ 模板和 C# 泛型之间的区别
- C++ 模板和 C# 泛型之间的区别(C# 编程)
- Anders Hejlsberg谈C#、Java和C++中的泛型
- C++“模板”和Java“泛型”
- C++ 模板和 C# 泛型之间的区别(C# 编程指南)
- C#中的静态构造函数 静态类 C# 泛型和 C++ 模板之间的主要差异
- C++的模板(和java的泛型一样)
- JAVA的泛型和C++的模板的区别与联系
- C# 泛型和 C++ 模板
- (收藏)Anders Hejlsberg谈C#、Java和C++中的泛型
- C#中的泛型与C++中的模板
- JAVA中的泛型和C++中的模板不一样
- [ZT]Anders Hejlsberg谈C#、Java和C++中的泛型
- Java 中的泛型与 C++ 模板的比较
- Anders Hejlsberg谈C#、Java和C++中的泛型
- Java 中的泛型与 C++ 模板的比较
- C#/C++ 模板和 C# 泛型之间的区别(C# 编程指南
- C++ 模板和 C# 泛型之间的区别
- (轉貼) Anders Hejlsberg談C#、Java和C++中的泛型 (.NET) (C#)