<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【軟件開發(fā)】編程語言C++(下篇)

          共 10655字,需瀏覽 22分鐘

           ·

          2021-07-21 19:32

          Start:關(guān)注本公眾號后,可直接聯(lián)系后臺獲取排版美化的詳細文檔!

          Hints:本篇文章所編纂的資料均來自網(wǎng)絡(luò),特此感謝參與奉獻的有關(guān)人員。


          • C++的語法組成:

          - - 類可以定義為描述對象行為/狀態(tài)的模板/藍圖。

          -對象 - 對象具有狀態(tài)和行為。例如:一只狗的狀態(tài) - 顏色、名稱、品種,行為 - 搖動、叫喚、吃。對象是類的實例。

          -方法 - 從基本上說,一個方法表示一種行為。一個類可以包含多個方法。可以在方法中寫入邏輯、操作數(shù)據(jù)以及執(zhí)行所有的動作。

          -即時變量 - 每個對象都有其獨特的即時變量。對象的狀態(tài)是由這些即時變量的值創(chuàng)建的。


          • C++的內(nèi)容組成:

          1核心語言,提供了所有構(gòu)件塊,包括變量、數(shù)據(jù)類型和常量,等等。

          2C++ 標準庫,提供了大量的函數(shù),用于操作文件、字符串等。

          3標準模板庫(STL),提供了大量的方法,用于操作數(shù)據(jù)結(jié)構(gòu)等。


          • C++ 的標準庫

          C++ 標準庫可以分為兩部分:

          -標準函數(shù)庫: 這個庫是由通用的、獨立的、不屬于任何類的函數(shù)組成的。函數(shù)庫繼承自 C 語言。

          -面向?qū)ο箢悗欤?/span> 這個庫是類及其相關(guān)函數(shù)的集合。

          -標準函數(shù)庫

          -輸入/輸出 I/O

          -字符串和字符處理

          -數(shù)學

          -時間、日期和本地化

          -動態(tài)分配

          -其他

          -寬字符函數(shù)

          -面向?qū)ο箢悗?/span>

          標準的 C++ 面向?qū)ο箢悗於x了大量支持一些常見操作的類,比如輸入/輸出 I/O、字符串處理、數(shù)值處理。面向?qū)ο箢悗彀韵聝?nèi)容:

          -標準的 C++ I/O 

          -String 

          -數(shù)值類

          -STL 容器類

          -STL 算法

          -STL 函數(shù)對象

          -STL 迭代器

          -STL 分配器

          -本地化庫

          -異常處理類

          -雜項支持庫


          • C++ 的STL庫

          C++ 標準模板庫的核心包括以下三個組件:

          組件

          描述

          容器(Containers

          容器是用來管理某一類對象的集合。C++  提供了各種不同類型的容器,比如  dequelist、vector、map 等。

          算法(Algorithms

          算法作用于容器。它們提供了執(zhí)行各種操作的方式,包括對容器內(nèi)容執(zhí)行初始化、排序、搜索和轉(zhuǎn)換等操作。

          迭代器(iterators

          迭代器用于遍歷對象集合的元素。這些集合可能是容器,也可能是容器的子集。


          • C++的存儲類:

          存儲類定義 C++ 程序中變量/函數(shù)的范圍(可見性)和生命周期。

          auto 存儲類

          auto 關(guān)鍵字用于兩種情況:聲明變量時根據(jù)初始化表達式自動推斷該變量的類型、聲明函數(shù)時函數(shù)返回值的占位符。在C++11中已刪除這一用法。

          register 存儲類

          register 存儲類用于定義存儲在寄存器中而不是 RAM 中的局部變量。

          static 存儲類

          static 存儲類指示編譯器在程序的生命周期內(nèi)保持局部變量的存在,而不需要在每次它進入和離開作用域時進行創(chuàng)建和銷毀。

          extern 存儲類

          extern 存儲類用于提供一個全局變量的引用,全局變量對所有的程序文件都是可見的。當您使用 'extern' 時,對于無法初始化的變量,會把變量名指向一個之前定義過的存儲位置。

          mutable 存儲類

          mutable 說明符僅適用于類的對象,mutable 成員可以通過 const 成員函數(shù)修改。

          thread_local 存儲類

          使用 thread_local 說明符聲明的變量僅可在它在其上創(chuàng)建的線程上訪問。變量在創(chuàng)建線程時創(chuàng)建,并在銷毀線程時銷毀。每個線程都有其自己的變量副本。


          • C++的輸入輸出

          C++  I/O 發(fā)生在流中,流是字節(jié)序列。如果字節(jié)流是從設(shè)備(如鍵盤、磁盤驅(qū)動器、網(wǎng)絡(luò)連接等)流向內(nèi)存,這叫做輸入操作。如果字節(jié)流是從內(nèi)存流向設(shè)備(如顯示屏、打印機、磁盤驅(qū)動器、網(wǎng)絡(luò)連接等),這叫做輸出操作。

          /O 庫頭文件

          下列的頭文件在 C++ 編程中很重要。

          頭文件

          函數(shù)和描述

          <iostream>

          該文件定義了 cin、cout、cerr  clog 對象,分別對應于標準輸入流、標準輸出流、非緩沖標準錯誤流和緩沖標準錯誤流。

          <iomanip>

          該文件通過所謂的參數(shù)化的流操縱器(比如 setw  setprecision),來聲明對執(zhí)行標準化 I/O 有用的服務。

          <fstream>

          該文件為用戶控制的文件處理聲明服務。我們將在文件和流的相關(guān)章節(jié)討論它的細節(jié)。

          標準輸入流(cin

          預定義的對象 cin  iostream 類的一個實例。cin 對象附屬到標準輸入設(shè)備,通常是鍵盤。cin 是與流提取運算符 >> 結(jié)合使用的

          標準錯誤流(cerr

          預定義的對象 cerr  iostream 類的一個實例。cerr 對象附屬到標準錯誤設(shè)備,通常也是顯示屏,但是 cerr 對象是非緩沖的,且每個流插入到 cerr 都會立即輸出。

          標準日志流(clog

          預定義的對象 clog  iostream 類的一個實例。clog 對象附屬到標準錯誤設(shè)備,通常也是顯示屏,但是 clog 對象是緩沖的。這意味著每個流插入到 clog 都會先存儲在緩沖區(qū),直到緩沖填滿或者緩沖區(qū)刷新時才會輸出。

          C++ 文件和流

          使用了 iostream 標準庫,它提供了 cin  cout 方法分別用于從標準輸入讀取流和向標準輸出寫入流。

          數(shù)據(jù)類型

          描述

          ofstream

          該數(shù)據(jù)類型表示輸出文件流,用于創(chuàng)建文件并向文件寫入信息。

          ifstream

          該數(shù)據(jù)類型表示輸入文件流,用于從文件讀取信息。

          fstream

          該數(shù)據(jù)類型通常表示文件流,且同時具有  ofstream  ifstream 兩種功能,這意味著它可以創(chuàng)建文件,向文件寫入信息,從文件讀取信息。

          在從文件讀取信息或者向文件寫入信息之前,必須先打開文件。ofstream  fstream 對象都可以用來打開文件進行寫操作,如果只需要打開文件進行讀操作,則使用 ifstream 對象。

          下面是 open() 函數(shù)的標準語法,open() 函數(shù)是 fstream、ifstream  ofstream 對象的一個成員。

          void open(const char *filename, ios::openmodemode);

          模式標志

          描述

          ios::app

          追加模式。所有寫入都追加到文件末尾。

          ios::ate

          文件打開后定位到文件末尾。

          ios::in

          打開文件用于讀取。

          ios::out

          打開文件用于寫入。

          ios::trunc

          如果該文件已經(jīng)存在,其內(nèi)容將在打開文件之前被截斷,即把文件長度設(shè)為 0。

           C++ 程序終止時,它會自動關(guān)閉刷新所有流,釋放所有分配的內(nèi)存,并關(guān)閉所有打開的文件。但程序員應該養(yǎng)成一個好習慣,在程序終止前關(guān)閉所有打開的文件。

          下面是 close() 函數(shù)的標準語法,close() 函數(shù)是 fstreamifstream  ofstream 對象的一個成員。

          void close();

          寫入文件

           C++ 編程中,我們使用流插入運算符( << )向文件寫入信息,就像使用該運算符輸出信息到屏幕上一樣。唯一不同的是,在這里您使用的是 ofstream  fstream 對象,而不是 cout 對象。

          讀取文件

           C++ 編程中,我們使用流提取運算符( >> )從文件讀取信息,就像使用該運算符從鍵盤輸入信息一樣。唯一不同的是,在這里您使用的是 ifstream  fstream 對象,而不是 cin 對象。

          文件位置指針

          istream  ostream 都提供了用于重新定位文件位置指針的成員函數(shù)。這些成員函數(shù)包括關(guān)于 istream  seekg"seekget")和關(guān)于 ostream  seekp"seek put")。

          seekg  seekp 的參數(shù)通常是一個長整型。第二個參數(shù)可以用于指定查找方向。查找方向可以是 ios::beg(默認的,從流的開頭開始定位),也可以是 ios::cur(從流的當前位置開始定位),也可以是 ios::end(從流的末尾開始定位)。

           

          • C++ 的異常處理

          異常是程序在執(zhí)行期間產(chǎn)生的問題。C++ 異常是指在程序運行時發(fā)生的特殊情況,比如嘗試除以零的操作。

          異常提供了一種轉(zhuǎn)移程序控制權(quán)的方式。C++ 異常處理涉及到三個關(guān)鍵字:try、catch、throw

          -throw: 當問題出現(xiàn)時,程序會拋出一個異常。這是通過使用 throw 關(guān)鍵字來完成的。

          -catch: 在您想要處理問題的地方,通過異常處理程序捕獲異常。catch 關(guān)鍵字用于捕獲異常。

          -try: try 塊中的代碼標識將被激活的特定異常。它后面通常跟著一個或多個 catch 塊。

          異常

          描述

          std::exception

          該異常是所有標準 C++ 異常的父類。

          std::bad_alloc

          該異常可以通過 new 拋出。

          std::bad_cast

          該異??梢酝ㄟ^ dynamic_cast 拋出。

          std::bad_exception

          這在處理 C++ 程序中無法預期的異常時非常有用。

          std::bad_typeid

          該異常可以通過 typeid 拋出。

          std::logic_error

          理論上可以通過讀取代碼來檢測到的異常。

          std::domain_error

          當使用了一個無效的數(shù)學域時,會拋出該異常。

          std::invalid_argument

          當使用了無效的參數(shù)時,會拋出該異常。

          std::length_error

          當創(chuàng)建了太長的  std::string 時,會拋出該異常。

          std::out_of_range

          該異常可以通過方法拋出,例如  std::vector   std::bitset<>::operator[]()

          std::runtime_error

          理論上不可以通過讀取代碼來檢測到的異常。

          std::overflow_error

          當發(fā)生數(shù)學上溢時,會拋出該異常。

          std::range_error

          當嘗試存儲超出范圍的值時,會拋出該異常。

          std::underflow_error

          當發(fā)生數(shù)學下溢時,會拋出該異常。

           

          • C++ 的動態(tài)內(nèi)存

          C++ 程序中的內(nèi)存分為兩個部分:

          -棧:在函數(shù)內(nèi)部聲明的所有變量都將占用棧內(nèi)存。

          -堆:這是程序中未使用的內(nèi)存,在程序運行時可用于動態(tài)分配內(nèi)存。

           C++ 中,您可以使用特殊的運算符為給定類型的變量在運行時分配堆內(nèi)的內(nèi)存,這會返回所分配的空間地址。這種運算符即 new 運算符。如果您不再需要動態(tài)分配的內(nèi)存空間,可以使用 delete 運算符,刪除之前由 new 運算符分配的內(nèi)存。

          malloc() 函數(shù)在 C 語言中就出現(xiàn)了,在 C++ 中仍然存在,但建議盡量不要使用 malloc() 函數(shù)。new  malloc() 函數(shù)相比,其主要的優(yōu)點是,new 不只是分配了內(nèi)存,它還創(chuàng)建了對象。

           

          • C++ 的信號處理

          信號是由操作系統(tǒng)傳給進程的中斷,會提早終止一個程序。

          信號

          描述

          SIGABRT

          程序的異常終止,如調(diào)用 abort。

          SIGFPE

          錯誤的算術(shù)運算,比如除以零或?qū)е乱绯龅牟僮鳌?/span>

          SIGILL

          檢測非法指令。

          SIGINT

          程序終止(interrupt)信號。

          SIGSEGV

          非法訪問內(nèi)存。

          SIGTERM

          發(fā)送到程序的終止請求。

           

          • C++ 的多線程

          多線程是多任務處理的一種特殊形式,多任務處理允許讓電腦同時運行兩個或兩個以上的程序。一般情況下,兩種類型的多任務處理:基于進程和基于線程。

          基于進程的多任務處理是程序的并發(fā)執(zhí)行。

          基于線程的多任務處理是同一程序的片段的并發(fā)執(zhí)行。

          多線程程序包含可以同時運行的兩個或多個部分。這樣的程序中的每個部分稱為一個線程,每個線程定義了一個單獨的執(zhí)行路徑。

          創(chuàng)建線程

          下面的程序,我們可以用它來創(chuàng)建一個POSIX 線程:

          #include <pthread.h>

          pthread_create (thread, attr, start_routine,arg)

          在這里,pthread_create 創(chuàng)建一個新的線程,并讓它可執(zhí)行。下面是關(guān)于參數(shù)的說明:

          參數(shù)

          描述

          thread

          指向線程標識符指針。

          attr

          一個不透明的屬性對象,可以被用來設(shè)置線程屬性。您可以指定線程屬性對象,也可以使用默認值 NULL。

          start_routine

          線程運行函數(shù)起始地址,一旦線程被創(chuàng)建就會執(zhí)行。

          arg

          運行函數(shù)的參數(shù)。它必須通過把引用作為指針強制轉(zhuǎn)換為 void 類型進行傳遞。如果沒有傳遞參數(shù),則使用 NULL

          創(chuàng)建線程成功時,函數(shù)返回 0,若返回值不為 0 則說明創(chuàng)建線程失敗。

          終止線程

          使用下面的程序,我們可以用它來終止一個POSIX 線程:

          #include <pthread.h>

          pthread_exit (status)

          在這里,pthread_exit 用于顯式地退出一個線程。通常情況下,pthread_exit() 函數(shù)是在線程完成工作后無需繼續(xù)存在時被調(diào)用。

          如果 main() 是在它所創(chuàng)建的線程之前結(jié)束,并通過 pthread_exit() 退出,那么其他線程將繼續(xù)執(zhí)行。否則,它們將在 main() 結(jié)束時自動被終止。

           

          • C++ 的Web編程

          公共網(wǎng)關(guān)接口(CGI),是使得應用程序(稱為 CGI 程序或 CGI 腳本)能夠與 Web 服務器以及客戶端進行交互的標準協(xié)議。

          CGI 的架構(gòu):

          Web 服務器配置

          在您進行 CGI 編程之前,請確保您的 Web 服務器支持 CGI,并已配置成可以處理 CGI 程序。所有由 HTTP服務器執(zhí)行的 CGI 程序,都必須在預配置的目錄中。該目錄稱為 CGI 目錄,按照慣例命名為 /var/www/cgi-bin。雖然 CGI 文件是 C++ 可執(zhí)行文件,但是按照慣例它的擴展名是 .cgi。

          HTTP 頭信息

           Content-type:text/html\r\n\r\n  HTTP 頭信息的組成部分,它被發(fā)送到瀏覽器,以便更好地理解頁面內(nèi)容。HTTP 頭信息的形式如下:

          HTTP 字段名稱字段內(nèi)容

          例如

          Content-type: text/html\r\n\r\n

          還有一些其他的重要的 HTTP 頭信息,這些在您的 CGI 編程中都會經(jīng)常被用到。

          頭信息

          描述

          Content-type:

          MIME 字符串,定義返回的文件格式。例如 Content-type:text/html。

          Expires: Date

          信息變成無效的日期。瀏覽器使用它來判斷一個頁面何時需要刷新。一個有效的日期字符串的格式應為 01 Jan 1998 12:00:00 GMT。

          Location: URL

          這個 URL 是指應該返回的 URL,而不是請求的 URL。你可以使用它來重定向一個請求到任意的文件。

          Last-modified: Date

          資源的最后修改日期。

          Content-length: N

          要返回的數(shù)據(jù)的長度,以字節(jié)為單位。瀏覽器使用這個值來表示一個文件的預計下載時間。

          Set-Cookie: String

          通過 string 設(shè)置 cookie。

          CGI 環(huán)境變量

          所有的 CGI 程序都可以訪問下列的環(huán)境變量。這些變量在編寫 CGI 程序時扮演了非常重要的角色。

          變量名

          描述

          CONTENT_TYPE

          內(nèi)容的數(shù)據(jù)類型。當客戶端向服務器發(fā)送附加內(nèi)容時使用。例如,文件上傳等功能。

          CONTENT_LENGTH

          查詢的信息長度。只對 POST 請求可用。

          HTTP_COOKIE

          以鍵 & 值對的形式返回設(shè)置的 cookies。

          HTTP_USER_AGENT

          用戶代理請求標頭字段,遞交用戶發(fā)起請求的有關(guān)信息,包含了瀏覽器的名稱、版本和其他平臺性的附加信息。

          PATH_INFO

          CGI 腳本的路徑。

          QUERY_STRING

          通過 GET 方法發(fā)送請求時的 URL 編碼信息,包含 URL 中問號后面的參數(shù)。

          REMOTE_ADDR

          發(fā)出請求的遠程主機的 IP 地址。這在日志記錄和認證時是非常有用的。

          REMOTE_HOST

          發(fā)出請求的主機的完全限定名稱。如果此信息不可用,則可以用 REMOTE_ADDR 來獲取 IP 地址。

          REQUEST_METHOD

          用于發(fā)出請求的方法。最常見的方法是  GET  POST

          SCRIPT_FILENAME

          CGI 腳本的完整路徑。

          SCRIPT_NAME

          CGI 腳本的名稱。

          SERVER_NAME

          服務器的主機名或 IP 地址。

          SERVER_SOFTWARE

          服務器上運行的軟件的名稱和版本。

           CGI 中使用 Cookies

          HTTP 協(xié)議是一種無狀態(tài)的協(xié)議。但對于一個商業(yè)網(wǎng)站,它需要在不同頁面間保持會話信息。例如,一個用戶在完成多個頁面的步驟之后結(jié)束注冊。但是,如何在所有網(wǎng)頁中保持用戶的會話信息。

          在許多情況下,使用 cookies 是記憶和跟蹤有關(guān)用戶喜好、購買、傭金以及其他為追求更好的游客體驗或網(wǎng)站統(tǒng)計所需信息的最有效的方法。

          它是如何工作的

          服務器以 cookie 的形式向訪客的瀏覽器發(fā)送一些數(shù)據(jù)。如果瀏覽器接受了 cookie,則 cookie 會以純文本記錄的形式存儲在訪客的硬盤上?,F(xiàn)在,當訪客訪問網(wǎng)站上的另一個頁面時,會檢索 cookie。一旦找到 cookie,服務器就知道存儲了什么。

          cookie 是一種純文本的數(shù)據(jù)記錄,帶有 5 個可變長度的字段:

          Expires : cookie 的過期日期。如果此字段留空,cookie 會在訪客退出瀏覽器時過期。

          Domain : 網(wǎng)站的域名。

          Path : 設(shè)置 cookie 的目錄或網(wǎng)頁的路徑。如果您想從任意的目錄或網(wǎng)頁檢索 cookie,此字段可以留空。

          Secure : 如果此字段包含單詞 "secure",那么 cookie 只能通過安全服務器進行檢索。如果此字段留空,則不存在該限制。

          Name=Value : cookie 以鍵值對的形式被設(shè)置和獲取。

          設(shè)置 Cookies

          向瀏覽器發(fā)送 cookies 是非常簡單的。這些 cookies 會在 Content-type 字段之前,與 HTTP 頭一起被發(fā)送。假設(shè)您想設(shè)置 UserID  Password  cookies

           

          • C++的編譯規(guī)則:

          -結(jié)束符

           C++ 中,分號是語句結(jié)束符。也就是說,每個語句必須以分號結(jié)束。它表明一個邏輯實體的結(jié)束。

          -空白符

           C++ 中,空格用于描述空白符、制表符、換行符和注釋。空格分隔語句的各個部分,讓編譯器能識別語句中的某個元素(比如 int)在哪里結(jié)束,下一個元素在哪里開始。

          -變量類型

          變量的類型大小會根據(jù)編譯器和所使用的電腦而有所不同。

          -變量定義

          變量其實只不過是程序可操作的存儲區(qū)的名稱。C++ 中每個變量都有指定的類型,類型決定了變量存儲的大小和布局,該范圍內(nèi)的值都可以存儲在內(nèi)存中,運算符可應用于變量上。

          -變量聲明

          變量聲明向編譯器保證變量以給定的類型和名稱存在,這樣編譯器在不需要知道變量完整細節(jié)的情況下也能繼續(xù)進一步的編譯。變量聲明只在編譯時有它的意義,在程序連接時編譯器需要實際的變量聲明。當您使用多個文件且只在其中一個文件中定義變量時(定義變量的文件在程序連接時是可用的),變量聲明就顯得非常有用。您可以使用 extern 關(guān)鍵字在任何地方聲明一個變量。

          -左值與右值

          C++ 中有兩種類型的表達式:

          -左值(lvalue):指向內(nèi)存位置的表達式被稱為左值(lvalue)表達式。左值可以出現(xiàn)在賦值號的左邊或右邊。

          -右值(rvalue):術(shù)語右值(rvalue)指的是存儲在內(nèi)存中某些地址的數(shù)值。右值是不能對其進行賦值的表達式,也就是說,右值可以出現(xiàn)在賦值號的右邊,但不能出現(xiàn)在賦值號的左邊。

          變量是左值,因此可以出現(xiàn)在賦值號的左邊。數(shù)值型的字面值是右值,因此不能被賦值,不能出現(xiàn)在賦值號的左邊。

          -變量作用域

          在函數(shù)或一個代碼塊內(nèi)部聲明的變量,稱為局部變量。

          在函數(shù)參數(shù)的定義中聲明的變量,稱為形式參數(shù)。

          在所有函數(shù)外部聲明的變量,稱為全局變量。

          -變量初始化

          當局部變量被定義時,系統(tǒng)不會對其初始化,您必須自行對其初始化。定義全局變量時,系統(tǒng)會自動初始化為默認值

          -運算符

          運算符是一種告訴編譯器執(zhí)行特定的數(shù)學或邏輯操作的符號。

          - C++ 中,您可以使用特殊的運算符為給定類型的變量在運行時分配堆內(nèi)的內(nèi)存,這會返回所分配的空間地址。這種運算符即 new 運算符。如果您不再需要動態(tài)分配的內(nèi)存空間,可以使用 delete 運算符,刪除之前由 new 運算符分配的內(nèi)存。

          -命名空間,可作為附加信息來區(qū)分不同庫中相同名稱的函數(shù)、類、變量等。使用了命名空間即定義了上下文。本質(zhì)上,命名空間就是定義了一個范圍。


          • C++的相關(guān)術(shù)語:

          -gcc & g++

          Linux上的gccGnuC語言編譯器,至于C++編譯器,它的名字叫做g++。

          -ram

          隨機存取存儲器RAM也叫主存,是與CPU直接交換數(shù)據(jù)的內(nèi)部存儲器。

          -cgi

          公共網(wǎng)關(guān)接口(CGI),是一套標準,定義了信息是如何在 Web 服務器和客戶端腳本之間進行交換的。

           

          • 參考資料:

          C++ 教程 | 菜鳥教程 (runoob.com)

          https://www.runoob.com/cplusplus/cpp-tutorial.html

          公眾號二維碼

          End:如果有興趣了解量化交易、數(shù)據(jù)分析和互聯(lián)網(wǎng)+的實用技術(shù),歡迎關(guān)注本公眾號

          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  红色一级A片 | 毛片毛片毛片毛片毛片毛片 | 国产精品视频三级 | 麻豆搜索结果 -- 爱色AV | 日本丰满熟妇一国产成人免费一 |