日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和友元

發布時間:2025/3/21 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和友元 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 定義

如果一個類模板包含一個非模板友元,則友元被授權可以訪問所有模板實例。如果友元自身是模板,類可以授權給所有友元模板實例,也可以只授權給特定實例。

1.1 一對一友好關系

類模板與另一個(類或函數)模板間友好關系的最常見的形式是建立對應實例及其友元間的友好關系。

eg. Blob類應該將BlobPtr類和一個模板版本的Blob相

//前置聲明,在Blob中聲明友元所需要的 template <typename> class BlobPtr; template <typename> class Blob; // 運算符==中的參數所需要的 template <typename T> bool operator== (const Blob<T>&const Blob<T>&) ;template <typename T> class Blob {//每個Blob實例將訪問權限授予用相同類型實例化的BlobPtr和相friend class B1obPtr<T> ;friend bool operator==<T> (const Blob<T>&const Blob<T>&) ;// 其他成員定義, 與12.1.1 (第405頁)相同 };

友元的聲明用Blob的模板形參作為它們自己的模板實參。因此,友好關系被限定在用相同類型實例化的Blob與BlobPtr相等運算符之間

Blob<char> ca; // BlobPtr<char> 和operator==<char>都是本對象的友元 Blob<int> ia;// BlobPtr<int>和operator==<int>都是本對象的友元

1.2 通用和特定的模板友好關系

一個類也可以將另一個模板的每個實例都聲明為自己的友元,或者限定特定的實例為友元:

//前置聲明,在將模板的一個特定實例聲明為友元時要用到 template <typename T> class Pal; class C { // C是一個普通的非模板類friend class Pal<C>; //用類C實例化的Pal是C的一個友元// Pal2的所有實例都是C的友元;這種情況無須前置聲明template <typename T> friend class Pal2; }; template <typename T> class C2 { // C2 本身是一個類模板// C2的每個實例將相同實例化的Pal聲明為友元friend class Pal<T>; // Pal 的模板聲明必須在作用域之內// Pal2的所有實例都是C2的每個實例的友元,不需要前置聲明template <typename X> friend class Pal2;// Pal3是一個非模板類,它是C2所有實例的友元friend class Pal3; //不需要Pal3的前置聲明 .};

1.3 令模板自己的類型參數成為友元

可以將模板類型參數聲明為友元.

eg. 將用來實例化Bar的類型聲明為友元。

對于某個類型名Foo:

Foo將成為Bar<Foo>的友元 Sales_ data 將成為Bar<Sales data>的友元 template <typename Type> class Bar {friend Type; // 將訪問權限授予用來實例化Bar的類型//... };

注意:雖然友元通常來說應該是一一個類或是一一個函數, 但我們完全可以用一個內置類型來實例化Bar.這種與內置類型的友好關系是允許的,以便我們能用內置類型來實例化Bar這樣的類。

總結

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和友元的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。