c++ 泛型

目录

1. 什么是泛型

2. 为什么需要泛型

3.泛型如何用


参考 泛型是什么,C++泛型编程又是什么?

1. 什么是泛型

泛型是什么,C++泛型编程又是什么?

泛型,实质上就是不使用具体数据类型(例如 int、double、float 等),而是使用一种通用类型来进行程序设计的方法,该方法可以大规模的减少程序代码的编写量,让程序员可以集中精力用于业务逻辑的实现。

维基-Generic programming

Generic programming is defined in Musser & Stepanov (1989) as follows,

泛型在 Musser & Stepanov (1989)中定义如下:

Generic programming centers around the idea of abstracting from concrete, efficient algorithms to obtain generic algorithms that can be combined with different data representations to produce a wide variety of useful software.

泛型的核心思想是从具体的、高效的算法中抽象出来,获得通用算法,这些算法可以与不同的数据表示结合,生成各种各样的有用软件。

— Musser, David R.; Stepanov, Alexander A., Generic Programming

What are generics in programming?

Generics are kind of like functions for variable types. Normally, you make a function for a task that you do a lot of, so instead of having to repeat the same code over and over again, you let the compiler and computer do that behind the scenes for you. 

泛型类似于变量类型的函数。通常情况下,你为一个你做了很多的任务创建一个函数,所以不必一遍又一遍地重复同样的代码,你可以让编译器和计算机在幕后为你做这些。

C++ 泛型(模板与容器)

泛型编程(Generic Programming)是一种语言机制,通过它可以实现一个标准的容器库。
像类一样,泛型也是一种抽象数据类型,但是泛型不属于面向对象,它是面向对象的补充和发展。在面向对象编程中,当算法与数据类型有关时,面向对象在对算法的抽象描述方面存在一些缺陷。

泛型在C++中的主要实现为模板函数和模板类。

2. 为什么需要泛型

C++ 泛型(模板与容器)

泛型在C++中的主要实现为模板函数和模板类。
通常使用普通的函数实现一个与数据类型有关的算法是很繁琐的,比如两个数的加法,要
考虑很多类型:

int add(int a,int b) { return a+b; }
float add(float a,float b) { return a+b; }

在C++中可以通过函数重载来解决这个问题,但是反复写相同算法的函数是比较辛苦的,更重要的是函数重载是静态编译,运行时占用过多内存。
在此我们可以用C++的模板函数来表达通用型的函数,如下:

template<typename T>            // 模板声明
T add(T a,T b) { return a+b; }  // 注意形参和返回值的类型

3.泛型如何用

泛型是什么,C++泛型编程又是什么?

#include <iostream>
using namespace std;

int add(int a,int b) { return a+b; }
float add(float a,float b) { return a+b; }

template <typename T>
T add(T a,T b)   //注意形参和返回类型
{ 
    return a+b;
} 
void main()
{
    int num1, num2, sum; 
    cin>>num1>>num2;
    sum=add(num1,num2); //用int匹配模版参数T,若sum,num1,num2类型不一致则无法匹配。
    cout<<sum;
}

那么,代码中的 T 是什么呢?很明显,这是一个占位符,更确切的说是一个类型占位符。也就是说,将来在 T 这个位置上的是一个真实、具体的数据类型,至于到底是哪个类型,完全取决于用户的需求。

当然,如果硬要给 T 这种类型占位符也叫做一种数据类型,提供这种想法的发明者称它为泛型(generic type),而使用这种类型占位符的编程方式就被称为泛型编程。

        总之一句话,泛型也是一种数据类型,只不过它是一种用来代替所有类型的“通用类型”。在 C++ 中,用以支持泛型应用的就是标准模板库 STL,它提供了 C++ 泛型设计常用的类模板和函数模板。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值