C++ 泛型编程(一) 基本概念

本文深入探讨了泛型编程的基本概念,包括泛型、泛型编程、模板的概念及其实例化过程,对比了泛型编程与面向对象编程的区别,并介绍了typename在模板参数声明中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型编程

  1. 基本概念

    ①.泛型:就是不使用具体数据类型,而是使用一种通用类型 T 来进行程序设计;T 只是一个占位符,实际在 T 的位置真实的数据类型取决于用户的需求;占位符的替换由编译器在编译阶段完成。

    ②.泛型编程:为了避免因数据类型的不同,而被迫重复编写大量相同业务逻辑的代码,因此发展了泛型及泛型编程技术;泛型编程就是独立于任何特定类型的方式编写代码,常用到STL容器、迭代器、和算法都是泛型编程的例子。

  2. 模版

    ①.概念:模版是 C++ 泛型编程的基础,一个模版就是一个创建类或者函数的蓝图。

    ②.实例化:编译器用推断出的模版参数来为我们创建一个特定版本的函数实例,整个过程发生在编译阶段。

在这里插入图片描述

  1. 与面向对象编程比较

    ①.多态

    面向对象编程支持运行期多态,如 virtual 函数的动态绑定发生在运行期;泛型编程支持编译期多态,在编译器根据模版实例出针对不同类型的具体代码。

    ②.接口

    面向对象编程支持显式接口,是由函数名称、参数类型、返回类型构成;泛型编程支持隐式接口,是基于有效的表达式推断出来的。

  2. typename

    ①.声明模版参数

    可以使用 class 或者 typename 声明模版参数,二者含义相同,可用互换。

    template<class T> class Widget;//使用 class
    template<typename  T> class Widget;//使用 typename 
    

    ②.声明从属嵌套类型

    当声明一个从属嵌套类型时,必须使用 typename 关键字,告诉编译器这是个类型。因为我们可以用域作用符 :: 来访问 static 成员和类型成员,在模版代码中,编译器遇到 T:: x 时,会默认假定访问的成员名字而不是类型。

    template<typename C>
    void Print2Nd(const C& container)
    {
       typename C::const_iterator iter(container.begin()) //确认是类型不是名称
    }
    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值