首頁 > 类库下载 > 其它類別庫 > c++類別模板中的友元宣告及模板建構函數

c++類別模板中的友元宣告及模板建構函數

高洛峰
發布: 2016-10-12 15:52:48
原創
1678 人瀏覽過

類別模板的友元聲明:

  當授予給定模板的所有實例的存取權的時候,在作用域中不需要存在該類別模板或函數模板的聲明。想要限制對特定實例化的友元關係時,必須在可以用於友元聲明之前聲明類別或函數。

template <class T>
class test
{
    template <class U> friend ostream& operator<< (ostream &os, const test<U> &obj); //友元的所有实例均具有访问权
    ...
};

class test;
template <class Type> ostream& operator<< (ostream &os, const test<Type> &obj);
template <class T>
class test
{
    friend ostream& operator<< <T> (ostream &os, const test<T> &obj);//友元为的T类型实例才有访问权
    ...
};
登入後複製

模板建構子:

  在一個模板類別中,建構函式和模板建構子同時存在時,優先呼叫建構子。只有當確切符合模板建構函式的介面時,才呼叫模板建構函式。編譯器永遠不會把模板建構函數視為建構函數,即使客戶沒有自己定義拷貝建構函數,編譯器也會產生一個預設的拷貝建構函數。

template <class T>
class test
{
public:
    test() { cout << "in my test construct" << endl;}
    test(const test &) { cout << "in my test copy" << endl;}
    template <class V>
    test(const test<V> &) { cout << "in my template copy" << endl;}
};


int main()
{
    test<int> t1;
    test<int> t2(t1);
    test<double> t3(t1);
    return 0;
}
登入後複製

此處的 template  test(const test &) 函數應該叫做型別轉換建構函數,它可以把一個test的型別轉換成test,也就是模版參數不同的模版類別。這個應用就是比如說我有一個int型別的陣列,要用來傳遞給一個double型別數組的參數,這個建構子就可以完成這個轉換。

程式的輸出結構為:

in my test construct

in my test copy

in my template copy

_ tr

在stls、

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板