当前位置:   article > 正文

02.02_111期_C++_模板笔记

02.02_111期_C++_模板笔记

使用函数模板 实现一个函数就可以起到上面三个函数才能起到的作用
当数据类型是int时,编译器生成一个函数,其形参类型都是int
当数据类型时double时,编译器生成一个函数,其形参类型都是double
在写入template<typename T>这句代码时可以生成多个参数
其函数模板的格式是template<typename T1, typename T2>
编译通过实参的类型,推出函数中的数据类型,生成对应的函数,这个过程叫模板实例化

下面两个函数模板中的函数名称可以相同
自定义类型的函数名也可以和函数模板的名称相同

  1. template<class T>
  2. T Add(const T& left, const T& right)
  3. {
  4. return left + right;
  5. }
  6. template<class T1, class T2>
  7. T1 Add(T1 left, T2 right)
  8. {
  9. return left + right;
  10. }
  11. int Add(const int& left, const int& right)
  12. {
  13. return left + right;
  14. }
  1. //类模板
  2. template<class T>
  3. class Stack
  4. {
  5. public:
  6. void Push(const T& x)
  7. {}
  8. private:
  9. T* _a;
  10. int _top;
  11. int _capacity;
  12. };
  1. int main()
  2. {
  3. int a1 = 10, a2 = 20;
  4. double d1 = 10.111, d2 = 20.111;
  5. //1. 如果调用的是具有模板的函数,编译器将会根据传入的数据去推演形参的类型
  6. //2. 如果像下面这种方式进行函数调用,可以称之为显示实例化
  7. // 那么编译器会直接将形参理解为<>中的数据类型
  8. cout << Add<double>(a1, a2) << endl;
  9. cout << Add<int>(d1, d2) << endl;
  10. // 下面第一行代码会调用模板T1 Add(T1 left, T2 right)
  11. // 第二行代码会调用int Add(const int& left, const int& right)
  12. // (如果模板和int Add(const int& left, const int& right)同时存在,
  13. // 由于调用int Add(const int& left, const int& right)需要类型转换
  14. // 所以会实例化模板
  15. // 第三行会直接通过显示实例化调用模板
  16. // 总结:显示实例化 > 参数类型匹配的自定义函数 > 模板 > 参数不匹配需要强转的自定义函数
  17. cout << Add(a1, a2) << endl;
  18. cout << Add(d1, d2) << endl;
  19. cout << Add<double>(a1, a2) << endl;
  20. //使用类模板,生成两个不同的栈类,不同之处在于存放的数据类型不同
  21. Stack<int> st1;
  22. Stack<double> st2;
  23. return 0;
  24. }

10 C++中使用模板类的原因

        10.1 模板可以具有非类型参数,用于指定大小,可以根据指定的大小创建动态结构

        10.2 模板最重要的一点就是类型无关,提高了代码复用性

        10.3 只要支持模板语法,模板的代码就是可移植的

注意:模板运行时不检查数据类型,也不保证类型安全,相当于类型的宏替换

13 模板声明的几种方式

        13.1 template<class T1,class T2>

        13.2template<typename T1,typename T2>

        13.3template<class T1,typename T2>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/986269
推荐阅读
相关标签
  

闽ICP备14008679号