真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義

一.模板的概念與意義

Q:C++中有幾種交換變量的方法?
定義宏代碼與定義函數(shù)
A.定義宏代碼
優(yōu)點:代碼復用,適合所有的類型
缺點:編譯器不知道宏的存在,缺少類型檢查
B.定義函數(shù)
優(yōu)點:真正的函數(shù)調(diào)用,編譯器對類型進行檢查
缺點:根據(jù)類型重復定義函數(shù),無法代碼復用

目前成都創(chuàng)新互聯(lián)已為超過千家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)絡空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設計、監(jiān)利網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

C.泛型編程--不考慮具體數(shù)據(jù)類型的編程方式
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
Swap泛型寫法中的T不是一個具體的數(shù)據(jù)類型,而是泛指任意的數(shù)據(jù)類型
C++中的泛型編程
函數(shù)模板--一種特殊的函數(shù)可用不同類型進行調(diào)用,看起來和普通函數(shù)很相似,區(qū)別是類型可被參數(shù)化
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
函數(shù)模板的語法規(guī)則
1.template關鍵字用于聲明進行泛型編程
2.typename關鍵字用于聲明泛指類型
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
函數(shù)模板的使用--自動類型推導和具體類型推導
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
函數(shù)模板的代碼示例

#include 
#include 

using namespace std;

template < typename T >
void Swap(T& a, T& b)
{
    T c = a;
    a = b;
    b = c;
}

template < typename T >
void Sort(T a[], int len)
{
    for(int i=0; i a[j] )
            {
                Swap(a[i], a[j]);
            }
        }
    }
}

template < typename T >
void Println(T a[], int len)
{
    for(int i=0; i

運行結果
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義

二.深入理解函數(shù)模板

A.函數(shù)模板深入理解
1.編譯器從函數(shù)模板通過具體類型產(chǎn)生不同的函數(shù)
2.編譯器會對函數(shù)模板進行兩次編譯--對模板代碼本身進行編譯,對參數(shù)替換后的代碼進行編譯
注意事項--函數(shù)模板本身不允許隱式類型轉換,在自動推導類型時,必須嚴格匹配,顯示類型指定時,能夠進行隱式類型轉換
代碼示例

#include 
#include 

using namespace std;

class Test
{
    Test(const Test&);
public:
    Test()
    {
    }
};

template < typename T >
void Swap(T& a, T& b)
{
    T c = a;
    a = b;
    b = c;
}

typedef void(FuncI)(int&, int&);
typedef void(FuncD)(double&, double&);

int main()
{
    FuncI* pi = Swap;    // 編譯器自動推導 T 為 int
    FuncD* pd = Swap;    // 編譯器自動推導 T 為 double

    cout << "pi = " << reinterpret_cast(pi) << endl;
    cout << "pd = " << reinterpret_cast(pd) << endl;

    return 0;
}

B.函數(shù)模板可以定義任意多個不同的參數(shù)類型
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
C.對于多參數(shù)函數(shù)模板
1.無法自動推導返回值類型
2.可以從左向右部分指定類型參數(shù)
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
代碼示例

#include 
#include 

using namespace std;

template 
< typename T1, typename T2, typename T3 >
T1 Add(T2 a, T3 b)
{
    return static_cast(a + b);
}

int main()
{
    // T1 = int, T2 = double, T3 = double
    int r1 = Add(0.5, 0.8);

    // T1 = double, T2 = float, T3 = double
    double r2 = Add(0.5, 0.8);

    // T1 = float, T2 = float, T3 = float
    float r3 = Add(0.5, 0.8);

    cout << "r1 = " << r1 << endl;     //被強制轉換為int類型所以 r1 = 1
    cout << "r2 = " << r2 << endl;     // r2 = 1.3
    cout << "r3 = " << r3 << endl;     // r3 = 1.3

    return 0;
}

C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
Q:當函數(shù)重載遇見函數(shù)模板會發(fā)生什么?
函數(shù)模板可以優(yōu)先考慮普通函數(shù)
1.C++編譯器優(yōu)先考慮普通函數(shù)
2.如果函數(shù)模板可以產(chǎn)生一個更好的匹配,那么選擇模板
3.如果通過空模板實參列表限定編譯器只匹配模板
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
代碼分析

#include 
#include 

using namespace std;

template < typename T >
T Max(T a, T b)
{
    cout << "T Max(T a, T b)" << endl;

    return a > b ? a : b;      
}

int Max(int a, int b)
{
    cout << "int Max(int a, int b)" << endl;

    return a > b ? a : b;
}

template < typename T >
T Max(T a, T b, T c)
{
    cout << "T Max(T a, T b, T c)" << endl;

    return Max(Max(a, b), c);//對第一個函數(shù)模板進行了重載
}

int main()
{
    int a = 1;
    int b = 2;
    //c++編譯器優(yōu)先考慮普通函數(shù)
    cout << Max(a, b) << endl;                   // 普通函數(shù) Max(int, int)

    cout << Max<>(a, b) << endl;                 // 函數(shù)模板 Max(int, int)

    cout << Max(3.0, 4.0) << endl;               // 函數(shù)模板 Max(double, double)

    cout << Max(5.0, 6.0, 7.0) << endl;          // 函數(shù)模板 Max(double, double, double)

    cout << Max('a', 100) << endl;               // 普通函數(shù) Max(int, int)

    return 0;
}

運行結果
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義

三.類模板的概念和意義

C++中的類模板
1.以相同的方式處理不同的類型
2.在類聲明前使用template進行標識
3.用于說明類中使用的泛指類型 T
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
類模板的應用
1.只能顯示指定具體類型,無法自動推導
2.使用具體類型定義對象
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
聲明的泛指類型T可以出現(xiàn)在類模板的任意地方,編譯器對類模板的處理方式和函數(shù)模板相同
1.從類模板通過具體類型產(chǎn)生不同的類
2.在聲明的地方對類模板代碼本身進行編譯
3.在使用的地方對參數(shù)替換后的代碼進行編譯
代碼示例

#include 
#include 

using namespace std;

template < typename T >
class Operator
{
public:
    T add(T a, T b)
    {
        return a + b;
    }
    T minus(T a, T b)
    {
        return a - b;
    }
    T multiply(T a, T b)
    {
        return a * b;
    }
    T divide(T a, T b)
    {
        return a / b;
    }
};

string operator-(string& l, string& r)//全局函數(shù)對減法進行重載
{
    return "Minus";
}

int main()
{
    Operator op1;

    cout << op1.add(1, 2) << endl;

    Operator op2;

    cout << op2.add("D.T.", "Software") << endl;
    cout << op2.minus("D.T", "Software") << endl;

    return 0;
}

運行結果
C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義


分享標題:C++--模板的概念和意義、深入理解函數(shù)模板、類模板的概念和意義
文章URL:http://weahome.cn/article/iejeii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部