C++泛型和泛型编程(通俗理解+模板程序)

1、泛型是什么? 泛型编程是什么?
实质上就是不使用具体数据类型(int、double、float等),而是使用一种通用类型来进行程序设计的方法,泛泛的描述一下数据,这个方法可以大规模的减少程序代码的编写量。
模板函数如下:
其中,T是一个占位符(数据类型占位符),也就是说,将来T这个位置是一个真实的、具体的数据类型。
所以,可以把T这种类型占位符也称为一种数据类型,就叫泛型(generic type)。使用这种类型占位符的编程方式就叫泛型编程
总之,泛型也是一种数据类型,但它是用来代替所有类型的“通用类型”。

C++中,

template<typename T>
int func(const T &a1, const T &a2)
{
    ...
}
template <class T>
inline int func(const T &a1, const T&a2)
{
    ...
}
tempalte<typename T1, typename T2, typename T3>
T1 func(const T2 &t2, const T3 &t3)
{
    ...
}
//调用方法
func<long>(i, log);

2、常用的泛型例子有什么?
STL容器、迭代器、算法都是泛型编程的例子。

3、泛型有什么形式实现的?
通常两种形式:函数模板和类模板。
函数模板:针对仅参数类型不同的函数;
类模板:针对仅数据成员和成员函数类型不同的类;

4、什么是模板?
使用了泛型的代码称为模板,由模板生成实际代码的过程称为模板的具体实现。

5、为什么有模板?
目的就是编写一些与类型无关的代码。

6、函数重载:函数名相同,参数类型不同,参数个数不同,参数顺序不同。
比模板代码要多。

/*泛型编程之重载函数、函数模板、类模板*/


//重载函数:出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。
#include 
#include 
using namespace std;
int add(int a, int b)
{
	return a + b;
}
float add(float a, float b)
{
	return a + b;
}
void main()
{
	int a = 1, b = 2;
	float c = 1.1, d = 2.5;
	printf("a+b=%d\nc+d=%lf", add(a, b), add(c, d));
	system("pause");
}


//泛型编程以独立于任何特定类型的方式编写代码。
//函数模板(function template)
#include 
using namespace std;
template <typename T>//定义模板函数以template开始
T add(T a, T b)
{
	return a + b;
}
int main()
{
	int a = 1, b = 2;
	float c = 1, d = 1.2;
	int e = add(a, b);
	float f = add(c, d);
	printf("a+b=%d\nc+d=%lf", e, f);
	system("pause");
	return 0;
}


//类模板
#include 
using namespace std;
template <class T>
class operate {
public:
	T a, b;
	T add()
		{
			return a + b;
		}
};
int main()
{
	//inital
	int a = 1, b = 2;
	float c = 1.0, d = 2.2;
	operate<int> add_int_num;
	operate<float> add_float_num;

	add_int_num.a = a;
	add_int_num.b = b;
	add_float_num.a = c;
	add_float_num.b = d;

	//get results
	printf("(int)a+b=%d\n(float)a+b=%lf\n", add_int_num.add(), add_float_num.add());
	return 0;
	system("pause");
}

你可能感兴趣的:(c++)