zoukankan      html  css  js  c++  java
  • 函数模板和类模板

    1. 函数模板

    1.1 函数模板使用的基本方法

    #include <iostream>
    using namespace std;

    template<class T> //只对其下面程序中的第一个函数生效
    void MySwap(T &a, T &b)
    {
    T temp = a;
    a = b;
    b = temp;
    }

    int main()

    {
    int a = 2, b = 3;
    MySwap(a, b); //可以自动类型推导, 也可以显示指定类型 ( MySwap<int>(a, b); )
    cout << "a=" << a << ", b=" << b << endl;
    system("pause");
    return 0;
    }

    1.2 函数模板和普通模板在一起调用规则

          函数模板可以被重载

          c++编译器优先考虑普通函数

    1.3 函数模板机制结论

          编译器并不是把函数模板处理成能够处理任何类型的函数

          函数模板通过具体类型产生不同的函数

          编译器会对函数模板进行两次编译,在模板声明的地方对模板代码本身进行编译,在调用的地方对参数替换成的代码进行编译

    2. 类模板

    2.1  使用类模板时最好使用类模板的类内实现

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

    template<class T1, class T2>
    class Person
    {
    public:
    Person(T1 name, T2 age)
    {
    this->mName = name;
    this->mAge = age;
    }
    void Show()
    {
    cout << mName << " " << mAge << endl;
    }
    public:
    T1 mName;
    T2 mAge;
    };

    int main()
    {
    int age = 20;
    string name = "Mike";
    Person<string, int> p(name, age); //必须显示指定类型
    p.Show();
    system("pause");
    return 0;
    }

    2.2 尽量不在类中使用友元函数

    2.3 类模板碰到static成员

    类模板——> 通过具体类型产生不同的类——> 类可以定义对象,static成员为类的对象所共有

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

    template<class T1, class T2>
    class Person
    {
    public:
    Person(T1 name, T2 age)
    {
    this->mName = name;
    this->mAge = age;
    }
    void Show()
    {
    cout << mName << " " << mAge << endl;
    }
    public:
    string mName;
    int mAge;
    static int a;
    };
    //类外初始化
    template<class T1, class T2>
    int Person<T1, T2>::a = 0;

    int main()
    {
    Person<string, int> p1("Mike", 20), p2("Lily", 21);
    Person<char, int> p3('a', 18), p4('b', 10);
    p1.a = 1;
    p3.a = 2;
    cout << p1.a << " " << p2.a << endl;
    cout << p3.a << " " << p4.a << endl;
    system("pause");
    return 0;
    }

  • 相关阅读:
    linux getch()实现
    cppcheck 下载与安装(Liunx)
    apt-get 命令
    nanopb 文档
    VS调试技术
    c 单元测试 check
    GDB 调试
    GCC选项 –I,-l,-L
    作业66
    zhuoye
  • 原文地址:https://www.cnblogs.com/mengjuanjuan/p/9783894.html
Copyright © 2011-2022 走看看