以前学习C、C++时没有接触过这一个概念,后来学习Java时,提出了这么一个名词,感觉好新鲜,但自己并没有认真研究过,更不要说用来写一个具体应用。
这些天要做一个将C#代码转换成C++代码的工作,由于自己学习的C++不够标准化(一般应用工具),为也防止自己写出不标准的C++代码,特意下载了powerdesigner来生成C++框架,但源码中使用到了泛型,据说C++中有一个类似的功能叫模板,但是对这些都不怎么了解,所以在网上查了一下,找出其特点方便了解。
以下是个人理解:
泛型就像是一个集合,其中包括了多种类型,可以使用泛型来定义不同类型的相同操作。有点类似面向对象中所说的,类的成员函数只有一份COPY,在同一个框架中通过改变类型来达到对不同类型的操作,而且不用关心类型转换等问题。
泛型也有点像面向对象语言中的Object(所有类的父类),但是其不用关心类型转换等问题,而普通的Object类就可能要考虑转换等问题。
在网上找到这么一个代码例子,是没有用泛型,但却是为了达到泛型的效果
interface Collection
{
public void add (Object x);
public Iterator iterator ();
}
interface Iterator
{
public Object next ();
public boolean hasNext ();
}
class NoSuchElementException extends RuntimeException {}
class LinkedList implements Collection
{
protected class Node
{
Object elt;
Node next = null;
Node (Object elt)
{
this.elt = elt;
}
}
protected Node head = null, tail = null;
public LinkedList () {}
public void add (Object elt)
{
if (head == null)
{
head = new Node(elt);
tail = head;
}
else
{
tail.next = new Node(elt);
tail = tail.next;
}
}
public Iterator iterator ()
{
return new Iterator ()
{
protected Node ptr = head;
public boolean hasNext ()
{
return ptr != null;
}
public Object next ()
{
if (ptr != null)
{
Object elt = ptr.elt;
ptr = ptr.next;
return elt;
}
else
throw new NoSuchElementException ();
}
};
}
}
这个就是没有利用泛型而达到类似泛型效果的JAVA代码,在C++中同样可以达到这种效果,但标准C++中没有一个所有子类的父类,所以要达到这一效果,应该要事先定义一个父类。