zoukankan      html  css  js  c++  java
  • 模板(1)

    /*模板(1)*/

    #include "stdafx.h"
    #include <iostream.h>
    #include <string.h>

    class A
    {
        int m_nData;
    public:
        A(int nData ) : m_nData(nData)
        {
        }
        //
    重载 >
        int operator>( const A& Obj )
        {
            return (m_nData > Obj.m_nData);
        }
        //
    友元函数,重载 <<         cout的引用    cout后面跟的参数
        friend ostream &operator<<(ostream &out, const A &Obj);
    };

    ostream &operator<<(ostream &out, const A &Obj)
    {
        out << Obj.m_nData << endl;
        return out;
    }

    //
    函数模板 T为函数模板的类型参数

    //
    模板的实例化函数(模板) ----> 模板(函数)
    //
    编译器在发现有函数调用的时候,
    //
    会为此模板生成一个相应类型的模板函数(max_int)
    //
    一般引用好一些
    template<typename T1>
    T1 &max(T1 &a, T1 &b)
    {
        return a > b ? a : b;
    }

    //
    模板的重载 
    template<typename T1>
    T1 &max(T1 &a, T1 &b, T1 &c)
    {
        T1 max1 = a > b ? a : b;
        return max1 > c ? max1 : c;
    }

    //
    模板特化: 对某种类型的特殊处理函数
    char *max(char *p1, char *p2, char *p3)
    {
        char *pMax = strcmp(p1, p2) > 0 ? p1 : p2;
        return strcmp(pMax, p3) > 0 ? pMax : p3;
    }

    //
    模板特化: 对某种类型的特殊处理函数
    char *max(char *p1, char *p2)
    {
        int n = strcmp(p1 ,p2);
        return n > 0 ? p1 : p2;
    }

    int main(int argc, char* argv[])
    {
        int i = 1;
        int j = 2;
        char *pStr1 = "Hello";
        char *pStr2 = "Wolrd";
        char *pStr3 = "Template";
       
        //
    模板特化函数的调用
        cout << max(pStr1, pStr2, pStr3) << endl;
       
        //
    当模板参数个数只有一个,两种写法一样
        cout << max(i, j) << endl;
       
        //
    当外部有匹配的函数时候,优先调用
        cout << max<int>(i, j) << endl;
       
        char ch = 'A';
       
        cout << max<char>((char&)i, ch) << endl;
       
       
        //?max@@YAHHH@Z
        cout << max(1, 2) << endl;
       
        cout << max(2, 1) << endl;
       
        //?max@@YAMMM@Z
        cout << max(1.0f, 2.0f) << endl;
       
        A thea(10), theb(20);
       
        //?max@@YA?AVA@@V1@0@Z
        cout << max(thea, theb) << endl;
       
        return 0;
    }

  • 相关阅读:
    Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)
    树的遍历(前序中序求后序,后序中序求前序)
    Codeforces Round #439 (Div. 2)
    python3 调用百度api实现语音识别
    Win10 opencv cuda + 扩展库 vs2019 cuda10
    flask读取摄像头并实时显示
    树莓派设置开机启动
    树莓派python OLED使用
    UART Fingerprint Sensor (C)树莓派使用
    树莓派全版本换源(多环境测试无误版)
  • 原文地址:https://www.cnblogs.com/w413133157/p/1663977.html
Copyright © 2011-2022 走看看