第六章 C++模板

简介:
//------------------------第六章 模板----------------------------------------------
/*
  模板是实现代码重用机制的一种工具,可以实现类型参数化。模板分为函数模板和类模板。
  C++中不建议使用宏,因为宏避开了类型检查机制,容易造成不必要的错误。
  模板声明形式:
  template <class Type> //class可以换成typename
  返回类型 函数名(模板参数表)
  {
      函数体
  }
*/
#include <iostream>
#include <cstring>
using namespace std;

template <typename Type>
Type GetMax(Type lhs, Type rhs)
{
    return lhs > rhs ? lhs : rhs;
}

int main()
{
    int nLhs = 10, nRhs = 90;
    float fLhs = 10.2, fRhs = 21.2;
    double dLhs = 2.11, dRhs = 0.123;
    char cLhs = 'b', cRhs = 'a';

    cout << GetMax(nLhs, nRhs) << endl
         << GetMax(fLhs, fRhs) << endl
         << GetMax(dLhs, dRhs) << endl
         << GetMax(cLhs, cRhs) << endl;
    return 0;
}


#include <iostream>
#include <cstring>
using namespace std;

template <typename Type>
Type Sum(Type *pArray, int size = 0)
{
    Type total = 0;

    for (int i = 0; i < size; i++)
        total += pArray[i];

    return total;
}

int main()
{
    int nArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    double dArray[] = {1.1, 2.2, 3.3, 4.4};

    cout << Sum(nArray, 9) << endl;//output 45
    cout << Sum(dArray, 4) << endl;//output 11

    return 0;
}


#include <iostream>
#include <cstring>
using namespace std;

//template <typename T>与函数模板定义语句之间不允许有别的语句
//int i; //这里出错,不允许
//T sum(T in);
//不过可以同时多个类型

template <typename T1, typename T2>
void OutputData(T1 lhs, T2 rhs)
{
    cout << lhs << " " << rhs << endl;
}

int main()
{
    OutputData('a', "b");
    OutputData(1, 2);
    OutputData(1, 1.9);
    return 0;
}


#include <iostream>
#include <cstring>
using namespace std;

template <typename T>
T Max(T lhs, T rhs)
{
    return lhs > rhs ? lhs : rhs;
}
int Max(int lhs, int rhs)//课本上只写int Max(int, int);但不能通过,必须要有定义
{
    return lhs > rhs ? lhs : rhs;
}

int main()
{
    int i = 10;
    char c = 'a';

    Max(i, i);//正确调用
    Max(c, c);//正确调用

    //解决办法可以是再重载一个普通函数,不需要模板函数,并且要
    //同名,加上int Max(int i, char c)就对了
    cout << Max(i, c) << endl;//出错,原来是模板函数不会进行隐式强制类型转换
    cout << Max(c, i) << endl;//出错,原来是模板函数不会进行隐式强制类型转换
    return 0;
}
下面会继续更新--------------------------------------------------------------------------------------------------------------------- 


目录
相关文章
|
2月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
108 10
|
4月前
|
编译器 C++
【C++】——初识模板
【C++】——初识模板
【C++】——初识模板
|
17天前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
31 4
|
17天前
|
算法 编译器 C++
【C++】模板详细讲解(含反向迭代器)
C++模板是泛型编程的核心,允许编写与类型无关的代码,提高代码复用性和灵活性。模板分为函数模板和类模板,支持隐式和显式实例化,以及特化(全特化和偏特化)。C++标准库广泛使用模板,如容器、迭代器、算法和函数对象等,以支持高效、灵活的编程。反向迭代器通过对正向迭代器的封装,实现了逆序遍历的功能。
29 3
|
5月前
|
程序员 C++
C++模板元编程入门
【7月更文挑战第9天】C++模板元编程是一项强大而复杂的技术,它允许程序员在编译时进行复杂的计算和操作,从而提高了程序的性能和灵活性。然而,模板元编程的复杂性和抽象性也使其难以掌握和应用。通过本文的介绍,希望能够帮助你初步了解C++模板元编程的基本概念和技术要点,为进一步深入学习和应用打下坚实的基础。在实际开发中,合理运用模板元编程技术,可以极大地提升程序的性能和可维护性。
|
20天前
|
编译器 C++
【c++】模板详解(1)
本文介绍了C++中的模板概念,包括函数模板和类模板,强调了模板作为泛型编程基础的重要性。函数模板允许创建类型无关的函数,类模板则能根据不同的类型生成不同的类。文章通过具体示例详细解释了模板的定义、实例化及匹配原则,帮助读者理解模板机制,为学习STL打下基础。
28 0
|
2月前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
18 1
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
47 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
2月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
84 2
|
2月前
|
存储 编译器 C++
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
42 2