模板

程序设计与算法(三)C++面向对象程序设计

郭炜

函数模板

  • 格式
    函数模板

  • T代表一种类型

  • 据模板和参数类型编译器自动生成函数,即模板实例化

  • 不通过参数也可实例化函数模板

    template <class T>
    //class 可替换为 typename,相同的意思
    T increase(T n) {
      return n + 1;
    } 
    int main()
    {
      cout << increase<double>(4) / 2;  //输出 2.5
      return 0;
    }
  • 函数模板可以有不止一个类型参数

  • 函数模板可以重载,形参类型参数不一致即可

  • 匹配模板函数时,不进行类型自动转换

  • 函数模板和函数的选择次序
    处理

类模板

  • template <class T>
    class className {
      private:
            T key;
        public:
            className(T k):key(k) {};
            bool func(T& k);
    }
    template <class T>
    bool className<T>::func(T& k) {
      return k;
    }
  • 类模板里的成员函数(类外定义时)

    template <class T1, class T2 ...>
    返回值类型 类模板名<类型参数名表>::成员函数名(参数表) {
    .....
    }
  • 实例化——类模板生成类的过程

    类模板名<真实类型参数表> 对象名(构造函数实参表)

    className<int> value(5);

  • 由类模板实例化而来的类叫模板类

  • 函数模板可以是类模板成员(成员函数模板)

  • 类模板的类型参数表中可以有非类型参数

    template <class T, int size>

与类模板相关的

  • 类模板从类模板派生时,需初始化基类类型

    template <class T1, class T2>
    class A {
        T1 key;
        T2 value;
    }
    
    template <class T1, class T2>
    class B:public A<T2, T1> {
        T1 answer;
        T2 static;
    }
    
    template <class T>
    class C:public A<T, T> {
        T lock;
    }
  • 函数、类、类的成员函数均可作为类模板的友元

  • 函数模板、类模板均可作为类模板的友元

    template <class T>
    friend ...
  • 类模板中定义的静态变量成员不被模板类共享,每个静态成员均需在外部声明

    template <class T>
    class A {
      private:
            static int count;
    }
    template<> int A<double>::count = 0;
    template<> int A<int>::count = 0;
    //两个模板类的声明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值