zoukankan      html  css  js  c++  java
  • C++提高---模板

    用{}初始化聚合对象如数组

    1)模板

      C++另一种编程思想--泛型编程,主要利用的技术是模板。----C++提供两种模板机制:函数模板和类模板

      1)函数模板

      1)函数模板

        作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。---提高代码复用性,将类型参数化

        语法:

          template<typename T>

          函数声明或定义

            解释:1)template----声明创建模板变量

                 2)typename----表明其后的符号是一种数据类型,可用class代替

                 3)T----通用的数据类型,名称可以替换,通常为大写字母

        使用方式:

            1)自动类型推导

              直接将数据传入函数模板的函数中,让编译器自己推导出数据类型-----如mySwap(a, b);

            2)显示指定类型

              用<>指定模板数据类型----如mySwap<int>(a, b);

      2)函数模板注意事项

        自动类型推导使用时----必须推导出一致的数据类型T

        模板必须要确定出T的数据类型,才可以使用-----即模板不能直接使用

      4)函数模板和普通函数的区别

        1)普通函数调用可以发生隐式类型转换

        2)函数模板  ----自动类型推导方式,不可以发生隐式类型转换,编译器自动判断出数据类型,不会自己转换数据类型

                 ----显示指定类型方式,可以发生隐式类型转换,编译器直接将数据类型转换成指定的数据类型

      5)普通函数与函数模板的调用规则-----一般要避免重名,了解即可

        1)普通函数和函数模板都可实现,优先掉普通函数

        2)可通过空模板参数列表(即<>)来强制调用空模板

        3)函数模板可以发生重载

        4)若函数模板可以产生更好的匹配,优先调用函数模板---如若调用普通函数需要编译器自己转换数据类型,而函数模板不需要的情况

      3)类模板

          作用:建立一个通用的类,类中的成员数据类型可以不具体制定,用一个虚拟的类型来代表。

          1)类模板语法

            template<typename T>-----可用class代替typename

            类

          2)类模板与函数模板区别

            1)类模板没有自动类型推导的使用方式

            2)类模板在模板参数列表中可以有默认参数(类型)

          3)类模板中的成员函数创建时机

            ----普通类中的成员函数一开始就可以创建,类模板中的成员函数在调用时才创建

          4)类模板对象做函数参数

              类模板实例化出对象,向函数传参的方式

              传入方式: 1)指定传入的类型-----比较常用,直接显示对象的数据类型

                    2)参数模板化----将对象中的参数变为模板进行传递---函数模板中形参为对象中的参数的模板化T

                    3)整个类模板化----将此对象类型模板化进行传递---函数模板中形参变为对象的模板化T

          5)类模板与继承

              注意事项:

                1)子类继承的父类是一个类模板时,子类声明时,要指定父类中T的数据类型

                2)若不指定,编译器无法给子类分配内存

                3)若想灵活指定出父类中T的类型,子类也需变为模板

          6)类模板成员函数类外实现

              1)补充template行,让编译器认识模板参数列表T

              2)实现时函数作用域::前补充参数列表<T>----若不加<T>,则只是普通的成员函数类外实现

          7)类模板分文件编写

              之前忘记写的小点:#pragma once----防止头文件重复包含

              常遇到问题:类模板中成员函数创建时机是在调用阶段,导致分文件编写时链接不到

              两种解决方式:

                1)运行文件中,直接包含.cpp源文件----没道理让人看源文件,一般少用

                2)将声明和实现写到同一个文件中,并改后缀名为.hpp,hpp为约定名称(一看hpp就知道是类模板),并非强制--主流

          8)类模板与友元

              掌握类模板配合友元函数的类内和类外实现

              全局函数类内实现--直接在类内用friend声明友元并实现即可

              全局函数类外实现--提前让编译器知道全局函数的存在---类内声明友元时要加模板参数列表<>,类外要加template让编译器明白

                  比较复杂

          

        

      

      

  • 相关阅读:
    [BZOJ] IOI2015 Boxes纪念品盒
    [BZOJ] 聚会
    [BZOJ] 地精部落
    [BZOJ] 最长距离
    正则
    cookie实例 记住用户名密码
    cookie封装
    碎片整合 例子
    闭包 tab切换 实例
    闭包
  • 原文地址:https://www.cnblogs.com/MissZhang-154/p/13267660.html
Copyright © 2011-2022 走看看