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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 19 特殊工具与技术)嵌套类

發(fā)布時(shí)間:2025/3/21 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 19 特殊工具与技术)嵌套类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 嵌套類( nested class)或嵌套類型( nested type )

一個(gè)類可以定義在另一個(gè)類的內(nèi)部,這個(gè)類常用于定義作為實(shí)現(xiàn)部分的類。

class TextQuery { public:class QueryResult; // 嵌套類稍后定義 }// QueryResult是TextQuery的成員 class TextQuery::QueryResult {// 位于類的作用域內(nèi), 因此我們不必對(duì)QueryResult形參進(jìn)行限定friend std::ostream& print(std::ostream&, const QueryResult&); public:// 嵌套類可以直接使用外層類的成員, 無(wú)須對(duì)該名字進(jìn)行限定QueryResult(std::string, std::shared_ptr<std::set<line_no>>,std::shared_ptr<std::vector<std::string>>); };

1.1 相互獨(dú)立

嵌套類是一個(gè)獨(dú)立的類, 與外層類基本沒(méi)什么關(guān)系。嵌套類也使用訪問(wèn)限定符來(lái)控制外界對(duì)其成員的訪問(wèn)權(quán)限。

  • 外層類對(duì)嵌套類的成員沒(méi)有特殊的訪問(wèn)權(quán)限, 同樣, 嵌套類對(duì)外層類的成員也沒(méi)有特殊的訪問(wèn)權(quán)限。
  • 嵌套類的對(duì)象只包含嵌套類定義的成員; 同樣, 外層類的對(duì)象只包含外層類定義的成員, 在外層類對(duì)象中不會(huì)有任何嵌套類的成員

1.2 作用域

嵌套類的名字在外層類作用域中是可見(jiàn)的, 在外層類作用域之外不可見(jiàn)。

  • 嵌套類的名字不會(huì)和別的作用域中的同一個(gè)名字沖突。
  • 嵌套類中成員的種類與非嵌套類是一樣的。

位于外層類 protected 部分的嵌套類定義的類型只能被外層類及其友元和派生類訪問(wèn)
位于外層類private 部分的嵌套類定義的類型只能被外層類的成員和友元訪問(wèn)

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 嵌套類的靜態(tài)成員定義

如果 QueryResult 聲明了一個(gè)靜態(tài)成員, 則該成員的定義將位于 TextQuery 的作用域之外。 例如, 假設(shè) QueryResult 有一個(gè)靜態(tài)成員, 則該成員的定義將形如:

// QueryResult 類嵌套在 TextQuery 類中, // 下面的代碼為 QueryResult 定義一個(gè)靜態(tài)成員 int TextQuery::QueryResult::static mem = 1 0 2 4;

1.5 嵌套類作用域中的名字查找

嵌套類是其外層類的一個(gè)類型成員, 因此外層類的成員可以像使用任何其他類型成員一樣使用嵌套類的名字。

//返回類型必須指明 QueryResult 是一個(gè)嵌套類 TextQuery::QueryResult TextQuery::query (const string Ssought ) const {//如果我們沒(méi)有找到sought, 則返回set的指針static shared _ptr<set<line_no? nodata (new set<line_no>) ;//使用find而非下標(biāo)以避免向 wm 中添加單詞auto loc = wm.find(sought) ;if (loc wm.end())return QueryResult(sought, nodata, file) ;//沒(méi)有找到elsereturn QueryResult(sought, loc->second, file); }

總結(jié)

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 19 特殊工具与技术)嵌套类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。