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

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

高洛峰
高洛峰原創
2016-10-12 15:52:481632瀏覽

類別模板的友元聲明:

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

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、

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多