成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c++-模板-創(chuàng)新互聯(lián)

c++-模板
  • 函數(shù)模板
  • 類模板
  • 模板重載
  • 參數(shù)類型推斷
    • 類型轉(zhuǎn)換
    • 顯示指明
  • 模板進(jìn)階 -- 還沒看

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比平陸網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式平陸網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋平陸地區(qū)。費(fèi)用合理售后完善,十年實體公司更值得信賴。函數(shù)模板

相當(dāng)于函數(shù)重載的進(jìn)階,類型參數(shù)化

數(shù)據(jù)的類型也可以通過參數(shù)傳遞
在函數(shù)定義時可以不指明具體的數(shù)據(jù)類型,當(dāng)發(fā)生函數(shù)調(diào)用時,編譯器根據(jù)傳入的實參自行推斷數(shù)據(jù)類型,相當(dāng)于類型參數(shù)化

函數(shù)模板

建立一個通用函數(shù),用到的數(shù)據(jù)類型(返回值、形參類型、局部變量類型)無需具體指定,用一個標(biāo)識符來站位,等發(fā)生函數(shù)調(diào)用時再根據(jù)傳入的實參來逆推出真正的類型
一旦定義類函數(shù)模板,就可以將類型參數(shù) 用于函數(shù)定義和函數(shù)聲明,(將內(nèi)置類型的地方,用類型參數(shù)來代替)

template函數(shù)模板關(guān)鍵字<>占位符typename T聲明具體的類型參數(shù),類型參數(shù)是T
template模板頭,模板頭中包含的類型參數(shù)可以用在函數(shù)定義的各個位置,包括返回值、形參列表和函數(shù)體

#includeusing namespace std;

templateT mmax(T a,T b);

templatevoid swap(T *a,T *b) // templatevoid swap(T *a,T *b) 也是可以的
{T temp=*a;
    *a=*b;
    *b=temp;
}

template// 可換行,但不能有分號
T mmax(T a,T b)
{if (a>=b)
        return a;
    else
        return b;
}

int main()
{int a=10,b=20;
    swap(&a,&b);
    cout<
類模板

類模板中定義的類型參數(shù)可以在類聲明和類定義中

templateclass MyPoint
{private:
    T1 x;
    T2 y;
public:
    MyPoint(T1 x,T2 y);
    void setx(T1 x);
    T1 getx() const;
    void sety(T2 y);
    T2 gety() const; // const 成員函數(shù) 不能修改成員this的成員值

    MyPoint *print() const;
};

templateMyPoint::MyPoint(T1 x,T2 y)
{this->x=x;
    this->y=y;
}

templatevoid MyPoint::setx(T1 x)
{this->x=x;
}

templatevoid MyPoint::sety(T2 y)
{this->y=y;
}

templateT1 MyPoint::getx() const
{return this->x;
}

templateT2 MyPoint::gety() const
{return this->y;
}

templateMyPoint* MyPoint::print() const
{return new MyPoint(this->x,this->y);
}

int main()
{// 創(chuàng)建對象
    MyPointp1(1,2);
    MyPointp2(3.,4.);
    MyPointp3(5,"lisi");

    // 創(chuàng)建對象
    MyPoint*p4=new MyPoint(6,7);

    // 接收返回值
    MyPoint*point_ptr=p1.print();
    cout<getx()<<" "<gety()<*point_ptr2=p2.print();
    cout<getx()<<" "<gety()<

例子2 !!!

#includeusing namespace std;

templateclass List
{private:
    int length; // 數(shù)組個數(shù)
    T *ptr; //數(shù)組指針
public:
    List(int length);
    List(List &arr); // 構(gòu)造函數(shù)重載
    ~List();

    void push_back(const T &v); // 添加元素
    // List & operator=(const List &a); // 數(shù)組見賦值, 成員函數(shù),返回的是引用

    T size();
    T & operator[](int idx); // 成員函數(shù),返回的是引用
};

templateList::List(int length)
{this->length=length;
    if (length==0)
    {this->ptr=NULL;
    }
    else
    {this->ptr=new T[this->length]();
    }
}

templateList::List(List &arr)
{if (!arr.ptr)
    {this->ptr==NULL;
        this->length=0;
        return ; // 這個也很重要
    }

    this->ptr=new T[arr.length];
    memcpy(this->ptr,arr.ptr,sizeof(T)*arr.length); // 內(nèi)存賦值
    this->length=arr.size;
}

templateList::~List()
{if (this->ptr)
    {delete[] this->ptr;
    }
    cout<<"析構(gòu)"<void List::push_back(const T &v)
{if (this->ptr)
    {// 注意寫法!??!
        T *temp_ptr=new T[this->length+1](); // 重新分配空間
        memcpy(temp_ptr,this->ptr,sizeof(T)*this->length); // 拷貝原有數(shù)組;
        delete[] this->ptr;
        this->ptr=temp_ptr;
    }
    else
    {this->ptr=new T[1]();
    }
    this->ptr[this->length++]=v;
}

templateT List::size()
{return this->length;
}

templateT & List::operator[](int idx)
{return this->ptr[idx];
}


int main()
{ListL(3);
    cout<
模板重載
#includeusing namespace std;

templatevoid mswap(T &a,T &b);
templatevoid mswap(T a[],T b[],int len);
templatevoid printArray(T arr[],int len);

int main()
{int a=10,b=20;
    cout<1,2,3};
    int arr2[3]={4,5,6};
    
    cout<<"******"<void mswap(T &a,T &b)
{T temp=a;
    a=b;
    b=temp;
}

templatevoid mswap(T a[],T b[],int len)
{T temp;
    for (int i=0;itemp=a[i];
        a[i]=b[i];
        b[i]=temp;
    }
}

templatevoid printArray(T arr[],int len)
{for (int i=0;icout<
參數(shù)類型推斷 類型轉(zhuǎn)換
templatevoid func(T a, T b);
func(1,2.3); // 錯誤不能進(jìn)行隱式的類型轉(zhuǎn)換,且不知道T應(yīng)該是哪個類型

templatevoid func(T a);
int a[10];
func(a); // T的類型為int *, 會進(jìn)行類型轉(zhuǎn)換

templatevoid func(T &a);
int a[10];
func(a); // 當(dāng)函數(shù)參數(shù)是引用類型時,數(shù)組不會轉(zhuǎn)換為指針,T的類型為int [10]

注意

當(dāng)顯示指明類型參數(shù)時,可以進(jìn)行類型轉(zhuǎn)換(隱式)

templatevoid func(T a, T b);
func(1,2.3); // 正確的
顯示指明
// 函數(shù)調(diào)用過程中只能推斷出T1 不能推斷出 T2,所以必須顯示指明
templatefunc(T1 a)
{T2 b;
}

// 顯示指明是,是按順序指明的
func(10)
模板進(jìn)階 – 還沒看

7.6

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前標(biāo)題:c++-模板-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://jinyejixie.com/article34/pegpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、軟件開發(fā)、響應(yīng)式網(wǎng)站、自適應(yīng)網(wǎng)站、App開發(fā)ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

霍林郭勒市| 左贡县| 永泰县| 东兰县| 金昌市| 宝坻区| 建湖县| 南陵县| 儋州市| 冷水江市| 乌恰县| 海丰县| 荃湾区| 荃湾区| 融水| 贵德县| 沙河市| 新疆| 肥西县| 陇西县| 皋兰县| 高青县| 巴林右旗| 酉阳| 射洪县| 襄汾县| 温泉县| 慈溪市| 达州市| 肃宁县| 江西省| 黔西| 涿州市| 闽清县| 彝良县| 南和县| 杭州市| 通许县| 苍溪县| 通城县| 夏津县|