C++ Primer 5th笔记(chap 19 特殊工具与技术)嵌套类
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 19 特殊工具与技术)嵌套类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 嵌套類( nested class)或嵌套類型( nested type )
一個類可以定義在另一個類的內部,這個類常用于定義作為實現部分的類。
class TextQuery { public:class QueryResult; // 嵌套類稍后定義 }// QueryResult是TextQuery的成員 class TextQuery::QueryResult {// 位于類的作用域內, 因此我們不必對QueryResult形參進行限定friend std::ostream& print(std::ostream&, const QueryResult&); public:// 嵌套類可以直接使用外層類的成員, 無須對該名字進行限定QueryResult(std::string, std::shared_ptr<std::set<line_no>>,std::shared_ptr<std::vector<std::string>>); };1.1 相互獨立
嵌套類是一個獨立的類, 與外層類基本沒什么關系。嵌套類也使用訪問限定符來控制外界對其成員的訪問權限。
- 外層類對嵌套類的成員沒有特殊的訪問權限, 同樣, 嵌套類對外層類的成員也沒有特殊的訪問權限。
- 嵌套類的對象只包含嵌套類定義的成員; 同樣, 外層類的對象只包含外層類定義的成員, 在外層類對象中不會有任何嵌套類的成員
1.2 作用域
嵌套類的名字在外層類作用域中是可見的, 在外層類作用域之外不可見。
- 嵌套類的名字不會和別的作用域中的同一個名字沖突。
- 嵌套類中成員的種類與非嵌套類是一樣的。
位于外層類 protected 部分的嵌套類定義的類型只能被外層類及其友元和派生類訪問
位于外層類private 部分的嵌套類定義的類型只能被外層類的成員和友元訪問
1.3 定義嵌套類的成員
TextQuery::QueryResult::QueryResult(string s, shared_ptr<set<line_no>> p,std::shared_ptr<std::vector<std::string>> f) :sought(s), lines(p), file(f) { }1.4 嵌套類的靜態成員定義
如果 QueryResult 聲明了一個靜態成員, 則該成員的定義將位于 TextQuery 的作用域之外。 例如, 假設 QueryResult 有一個靜態成員, 則該成員的定義將形如:
// QueryResult 類嵌套在 TextQuery 類中, // 下面的代碼為 QueryResult 定義一個靜態成員 int TextQuery::QueryResult::static mem = 1 0 2 4;1.5 嵌套類作用域中的名字查找
嵌套類是其外層類的一個類型成員, 因此外層類的成員可以像使用任何其他類型成員一樣使用嵌套類的名字。
//返回類型必須指明 QueryResult 是一個嵌套類 TextQuery::QueryResult TextQuery::query (const string Ssought ) const {//如果我們沒有找到sought, 則返回set的指針static shared _ptr<set<line_no? nodata (new set<line_no>) ;//使用find而非下標以避免向 wm 中添加單詞auto loc = wm.find(sought) ;if (loc wm.end())return QueryResult(sought, nodata, file) ;//沒有找到elsereturn QueryResult(sought, loc->second, file); }總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 19 特殊工具与技术)嵌套类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha