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

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

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í)體公司更值得信賴。函數(shù)模板

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

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

函數(shù)模板

建立一個通用函數(shù),用到的數(shù)據(jù)類型(返回值、形參類型、局部變量類型)無需具體指定,用一個標(biāo)識符來站位,等發(fā)生函數(shù)調(diào)用時再根據(jù)傳入的實(shí)參來逆推出真正的類型
一旦定義類函數(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)查看詳情吧


網(wǎng)站欄目:c++-模板-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://weahome.cn/article/pegpe.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部