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;
    }

  • 相关阅读:
    阿衣楚往事
    加速计算机启动
    此一生,与谁相逢v
    关于cmd代码
    关于POJO
    ERP,SOA与J2EE什么关系
    QoBean技术文档(1):QoBean的基础技术
    ed 1.7 支持60种编程语言的免费编辑器
    面试必问的16个经典问题的回答思路
    Java 多线程间的通讯
  • 原文地址:https://www.cnblogs.com/mengjuanjuan/p/9783894.html
Copyright © 2011-2022 走看看