精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

適合具備 C 語言基礎的 C++ 教程之五

開發 后端
在本節我們將依次闡述封裝、繼承、派生的具體用法,在這里,我們先敘述的是封裝這個屬性的的相關內容。下圖是關于 封裝 這個特性所包含的一些內容。

[[382696]]

前言

在上述教程中,我們已經完成了 C++相對于 C語言來說獨特的語法部分,在接下來的教程中,我們將敘述 C++中面向對象的語法特性。我們在學習面向對象的這種編程方法的時候,常常會聽到這三個詞,封裝、繼承、派生,這也是面向對象編程的三大特性,在本節我們將依次闡述封裝、繼承、派生的具體用法,在這里,我們先敘述的是封裝這個屬性的的相關內容。下圖是關于 封裝 這個特性所包含的一些內容。

封裝

下圖就是封裝所具備的相關特性:

image-20210209204824118 

那么上圖所示的抽象出數據成員以及成員函數具體的含義是什么呢,正如前面教程所述,在前面的教程里,我們選用一個 Person類來作為例子進行講解,其中這個類里我們有 name以及age,這個也就是我們抽象出來的數據,那抽象出來的成員函數也就是前面教程講到的setName()和setAge()函數,在設計這個類的時候,會把這個類的一些成員設置為私有的或者公有的,這也就是訪問控制。具體的代碼如下所示:

  1. /* 為了代碼簡便,省略相關構造函數以及析構函數,為的是展示封裝的特性*/ 
  2. class Person { 
  3. private: 
  4.     char *name
  5.     int age; 
  6.  
  7. public
  8.  
  9.     Person() 
  10.     { 
  11.         cout << "Person" << endl; 
  12.         name = NULL
  13.     } 
  14.  
  15.     ~Person() 
  16.     { 
  17.         cout << "~Person()" << endl; 
  18.         if (this->name
  19.         { 
  20.             delete this->name
  21.         } 
  22.     } 
  23.  
  24.     void setName(char *name
  25.     { 
  26.         if (this->name) { 
  27.             delete this->name
  28.         } 
  29.         this->name = new char[strlen(name) + 1]; 
  30.         strcpy(this->namename); 
  31.     } 
  32.  
  33.     int setAge(int a) 
  34.     { 
  35.         if (a < 0 || a > 150) 
  36.         { 
  37.             age = 0; 
  38.             return -1; 
  39.         } 
  40.         age = a; 
  41.         return 0; 
  42.     } 
  43. }; 

繼承

繼承的含義就如其字面意思一樣,用更加專業的話來說,就是從基類繼承相關屬性,而這個新的類就叫做派生類。下面這個示意圖也表明了繼承所帶來的代碼的簡潔與方便。

image-20210209211013964 

就如上述這張圖所示,一個人肯定具有名字和年齡這兩個屬性,那作為一個學生來講,他也必定具備名字和年齡這兩個屬性,那這個時候是要在 Student類里重新定義這些屬性么?顯然,因為引入了繼承這個特性,只需要繼承Person類,那么Student就具備 Person類的相關屬性。在上述代碼的基礎上,我們增加如下所示的代碼:

  1. /* 注意是在上述代碼的基礎上 */ 
  2.  
  3. class Student : public Person 
  4.  
  5. }; 
  6.  
  7. int main(int argc, char **argv) 
  8.     Student s; 
  9.  
  10.     s.setName("zhangsan"); 
  11.     s.setAge(16); 
  12.     s.printInfo(); 
  13.  
  14.     return 0; 

上述代碼中,Student類是繼承自 Person類的,我們可以看到在上述所示的Student類中,并沒有setName和 setAge的成員函數,但是在定義的 Student實例中,卻能夠適用 setName和 setAge的成員函數,這也就說明了 Student類已經繼承了 Person類。

繼承后的訪問控制

private

一個派生類從一個基類繼承而來,而繼承的方式有多種,可以是私有繼承,也可以是公有繼承,同時也可以是保護繼承。那么這個時候基類的各個數據成員的訪問屬性又是怎么樣的呢,我們來看一下下面這張圖,其展現了以各種方式繼承自基類的派生類的數據成員的屬性。

image-20210209223145289 

從這個表可以清楚地知道基類的訪問屬性與派生類的訪問屬性的對應情況。同樣的,我們用一個簡單的例子來說明這個知識點:

  1. class Father 
  2. private: 
  3.     int money; 
  4. public
  5.     void it_skill(void) 
  6.     { 
  7.         cout << "The father's it skill" <<endl; 
  8.     } 
  9.  
  10.     int getMoney(void) 
  11.     { 
  12.         return money; 
  13.     } 
  14.  
  15.     void setMoney(int money) 
  16.     { 
  17.         this->money = money; 
  18.     } 
  19. }; 

這個是基類的數據成員以及成員函數,為了更好的說明繼承后的數據的屬性,我們定義一個 son類,代碼如下所示:

  1. class Son : public Father 
  2. private: 
  3.     int toy; 
  4. public
  5.     void play_game(void) 
  6.     { 
  7.         cout << "play_game()" << endl; 
  8.  
  9.         int m; 
  10.  
  11.         //money -= 1; /* 錯誤的代碼 */ 
  12.  
  13.         m = getMoney(); 
  14.         m--; 
  15.         setMoney(m); 
  16.     } 
  17. }; 

上述定義了兩個類,一個是 Father類,一個是 Son類,Son類繼承于 Father類,這兩個類用通俗的語言進行解釋便是,父親有自己的私房錢,兒子有自己的玩具,父親有一項技能是 it,兒子呢比較喜歡玩游戲。因為是繼承,所以兒子類具有父親類的相關屬性,但是,作為兒子是不能夠直接去父親兜里拿錢的,那會被揍,但是如果兒子需要錢,可以向父親要。這對應的代碼也就是上述中 money -= 1,但是這是錯誤的,不能直接從父親的兜里拿錢,而剩余的三句代碼的意思也就相當于是向父親要錢。用專業的話來講也就是:派生類不能夠訪問基類的私有成員,緊接著是主函數的代碼:

  1. int main(int argc, char **argv) 
  2.     Son s; 
  3.  
  4.     s.it_skill(); 
  5.     s.setMoney(10); 
  6.     cout << "The money is:" << s.getMoney() << endl; 
  7.  
  8.     s.play_game(); 
  9.  
  10.     return 0; 

代碼輸出的結果如下所示:

image-20210209232507917 

protected

還是采用比較通俗的話來敘述這一知識點,兒子相對于父親的關系自然是與其他人有所不同的,比如有一把父親房間門的鑰匙,對于兒子來說是可以拿到的,但是對于外人來說,這是不可訪問的。那在程序中要如何實現這么一個功能呢?這里就要引入 protected了。代碼如下所示:

  1. class Father { 
  2. private: 
  3.     int money; 
  4.  
  5. protected: 
  6.     int room_key;   /* 增添的 room_key */ 
  7.  
  8. public
  9.     void it_skill(void) 
  10.     { 
  11.         cout<<"father's it skill"<<endl; 
  12.     } 
  13.  
  14.     int getMoney(void) 
  15.     { 
  16.         return money; 
  17.     } 
  18.  
  19.     void setMoney(int money) 
  20.     { 
  21.         this->money = money; 
  22.     } 
  23. }; 

我們可以看到在 Father類中,增添了一項就是 protected修飾的 room_key,緊接著我們來看Son類的代碼:

  1. class Son : public Father { 
  2. private: 
  3.     int toy; 
  4. public
  5.     void play_game(void) 
  6.     { 
  7.         int m; 
  8.  
  9.         cout<<"son paly game"<<endl; 
  10.  
  11.         m = getMoney(); 
  12.         m--; 
  13.         setMoney(m); 
  14.  
  15.         /* 外人不能拿父親的房間鑰匙 
  16.          * 兒子可以 
  17.          */ 
  18.         room_key = 1;  
  19.     } 
  20. }; 

我們看到,這個時候,是可以在 Son類里面直接操作使用 protected修飾的 room_key的。在這里總結一下就是:派生類可以直接訪問到基類用 protected 修飾的數據成員。接下來,我們繼續看主函數的代碼:

  1. int main(int argc, char **argv) 
  2.     Son s; 
  3.  
  4.     s.setMoney(10); 
  5.     cout << s.getMoney()<<endl; 
  6.  
  7.     s.it_skill(); 
  8.     s.play_game();   
  9.  
  10.     //s.room_key = 1; 
  11.  
  12.     return 0; 

通過上述代碼可以看到 s.room_key = 1這條語句被注釋了,這條語句是錯誤的,雖然基類使用了 protected修飾了 room_key,但是在主函數中,仍然是不能夠直接訪問 room_key的。

調整訪問控制

依舊采用比較通俗的話來闡述,如果兒子從父親那里繼承了一些東西,那這個時候,繼承得到的這些東西的處理權就全在兒子了。在程序里面也是同樣的道理,我們在上述代碼的基礎上進行更改,Father類不變,改變 Son類。代碼如下所示:

  1. class Son : public Father { 
  2. private: 
  3.     int toy; 
  4. public
  5.     using Father::room_key; 
  6.  
  7.     void play_game(void) 
  8.     { 
  9.         int m; 
  10.  
  11.         cout<<"son paly game"<<endl; 
  12.  
  13.         m = getMoney(); 
  14.         m--; 
  15.         setMoney(m); 
  16.  
  17.         room_key = 1;  
  18.     } 
  19. }; 

上述代碼中,我們可以看到在 public的作用域內,我們使用 using Father::room_key將 room_key的屬性更改為 public,做了這樣的更改之后,我們就可以在主函數里直接訪問 room_key了。代碼如下所示:

  1. int main(int argc, char **argv) 
  2.     Son s; 
  3.  
  4.     s.setMoney(10); 
  5.     cout << s.getMoney()<<endl; 
  6.  
  7.     s.it_skill(); 
  8.     s.play_game(); 
  9.  
  10.     s.room_key = 1; 
  11.  
  12.     return 0; 

上述代碼是可以運行的,也說明這種方式是可行的。但是如果想要將 money的屬性更改為 public,也就是增加如下所示的代碼:

  1. class Son : public Father { 
  2. private: 
  3.     int toy; 
  4. public
  5.     using Father::room_key; 
  6.     using Father::money; 
  7.  
  8.     void play_game(void) 
  9.     { 
  10.         int m; 
  11.  
  12.         cout<<"son paly game"<<endl; 
  13.  
  14.         m = getMoney(); 
  15.         m--; 
  16.         setMoney(m); 
  17.  
  18.         room_key = 1;  
  19.     } 
  20. }; 

那么編譯將不會通過,錯誤信息如下所示:

image-20210210001456319 

說明這種方法是不可行的,這是為什么呢?是因為對于 Son來說,money本身就是它不能訪問到的數據,那么自然也就不能夠對其屬性進行更改了。換句更加專業的話來敘述也就是:在調整訪問控制的時候,只有類本身能夠訪問到的數據才能調整它的訪問控制,如果其本身對于這個類就是不能夠訪問的,那么也就無法對其進行更改。

那上述可以說是提升訪問控制,同樣的,也可以降低訪問控制,比如說上述的 it_skill,如果不想把這個屬性繼續繼承下去或者說不讓外部能夠訪問到它,那么也可以降低它的訪問控制,降低的方法跟提升的方法是一樣的,只需要在 private中加上一句代碼就可以,加了的代碼如下所示:

  1. class Son : public Father 
  2. private: 
  3.     int toy; 
  4.     using Father::it_skill; 
  5. public
  6.     /* 省略 */ 
  7. }; 

因此,只要對于派生類能夠看到的數據成員或者成員函數,它都能夠提高或者降低它的訪問控制。

三種不同繼承方式的差異

在上述的內容中,我們提到了派生類在繼承基類的時候,存在不同的繼承方式,不同的繼承方式對數據成員的使用以及其成員函數的調用存在不同的影響,下面分別是三種不同的繼承方式:public和 private以及protected,代碼如下所示:

  1. /* 以 public 方式繼承 */ 
  2. class Son_pub : public Father { 
  3. private: 
  4.     int toy; 
  5. public
  6.  
  7.     void play_game(void) 
  8.     { 
  9.         int m; 
  10.  
  11.         cout<<"son play game"<<endl; 
  12.  
  13.         m = getMoney(); 
  14.         m--; 
  15.         setMoney(m); 
  16.  
  17.         room_key = 1;  
  18.     } 
  19. }; 
  20.  
  21. /* 以 private 方式繼承 */ 
  22. class Son_pri : private Father { 
  23. private: 
  24.     int toy; 
  25. public
  26.  
  27.     void play_game(void) 
  28.     { 
  29.         int m; 
  30.  
  31.         cout<<"son play game"<<endl; 
  32.         m = getMoney(); 
  33.         m--; 
  34.         setMoney(m); 
  35.  
  36.         room_key = 1;  
  37.     } 
  38. }; 
  39.  
  40. /* 以 protected 方式繼承 */ 
  41. class Son_pro : protected Father { 
  42. private: 
  43.     int toy; 
  44. public
  45.  
  46.     void play_game(void) 
  47.     { 
  48.         int m; 
  49.  
  50.         cout<<"son play game"<<endl; 
  51.         m = getMoney(); 
  52.         m--; 
  53.         setMoney(m); 
  54.  
  55.         room_key = 1;  
  56.     } 
  57. }; 

上述代碼就是以三種不同方式從 Father類得到的 Son類,每一種繼承方式存在什么不同呢,我們通過主函數來說明這個問題:

  1. int main(int argc, char **argv) 
  2.     Son_pub s_pub; 
  3.     Son_pro s_pro; 
  4.     Son_pri s_pri; 
  5.  
  6.     s_pub.play_game(); 
  7.     s_pro.play_game(); 
  8.     s_pri.play_game(); 
  9.  
  10.     s_pub.it_skill(); 
  11.     //s_pro.it_skill();  // error 
  12.     //s_pri.it_skill();  // error 
  13.  
  14.     return 0; 

通過上述代碼,并對照上述那種表,我們可以知道,無論是何種繼承方式,派生類內部public的成員函數都是可以使用的,而對于從基類繼承得到的成員函數,如果是以 protected和private方式來繼承的話,那么是不能夠在主函數進行調用的,因此上述代碼中注釋掉的兩句后面表明了錯誤。

上述的代碼所展示的是一層的繼承,我們在繼承得到的派生類 Son的基礎上繼續繼承得到 Grandson,首先我們先在 Father類里新增加一個public的數據成員,增加的代碼如下所示:

  1. class Father 
  2. private: 
  3.     int money; 
  4. protected: 
  5.     int room_key; 
  6. public
  7.     int address; 
  8.     /*其余不改動,省略*/ 
  9. }; 

增加了上述Father類的代碼之后,我們來看 Grandson_pub類的代碼:

  1. class Grandson_pub : public Son_pub 
  2. public
  3.     void test(void) 
  4.     { 
  5.         room_key = 1; /* room_key is protected */ 
  6.         address = 2;  /* address is public */ 
  7.     } 
  8. }; 

上述代碼中,Grandson_pub是以 public的方式從 Son_pub繼承而來,room_key在 Father類是 protected,在 Son_pub類也是 protected,那么在這里也是 protected,而對于 address來說,它在 Father類里是 public,在 Son_pub里也是 public,在這里也是 public,所以在這里都能夠訪問到。

緊接著來看,Grandson_pro類的代碼:

  1. class Grandson_pro : public Son_pro 
  2. public
  3.     void test(void) 
  4.     { 
  5.         room_key = 1;  /* room_key is protected */ 
  6.         address = 2;   /* address is protected */ 
  7.     } 
  8. }; 

上述中,Grandson_pro是以 public的方式從 Son_pro中繼承得到的,以剛剛那種分析的思路我們能夠分析得出 room_key當前是 protected以及 address是 protected,那么當前的數據成員在這也就是都能夠訪問的了。

繼續來看Grandson_pri類的代碼,代碼如下所示:

  1. class Grandson_pri : public Son_pri 
  2. public
  3.     void test(void) 
  4.     { 
  5.         //room_key = 1; /* room_key is private */ 
  6.         //address = 2;  /* address is private */ 
  7.     } 
  8. }; 

上述中,Grandson_pri是以 public的方式從 Son_pri中繼承得來,同樣按照上述的分析方法,我們能夠分析出 room_key和 address都是 private的,既然是 private的,那么也就不能夠進行訪問,因此上述代碼中,我們將兩句代碼進行了注釋。

小結

上述就是本次分享的關于封裝以及繼承的相關內容,主要是關于繼承之后數據成員的訪問控制,以及通過不同的方式進行繼承時的數據成員的訪問控制。

上述教程所涉及的代碼可以通過百度云鏈接的方式獲取到,下面是百度云鏈接:

鏈接:https://pan.baidu.com/s/18AGYqxkxsEcR4ZW6_Nhevg

提取碼:dlst

本文轉載自微信公眾號「 wenzi嵌入式軟件」,可以通過以下二維碼關注。轉載本文請聯系 wenzi嵌入式軟件公眾號。

 

 

責任編輯:武曉燕 來源: wenzi嵌入式軟件
相關推薦

2021-02-20 06:13:18

C 語言C++

2021-02-11 08:25:17

C 語言C++ 基礎

2021-02-16 10:57:34

C++ C 語言windows

2021-02-08 20:25:12

C 語言C++Linux

2021-07-16 07:21:45

C++可調用對象std::functi

2010-01-15 17:38:37

C++語言

2010-01-19 14:45:35

C++語言

2020-08-21 13:20:36

C++If ElseLinux

2021-04-25 08:11:57

C語言常量與變量標識符命名規范

2011-07-14 17:45:06

CC++

2011-07-15 00:47:13

C++多態

2021-02-06 07:49:48

C語言編程開發技術

2011-01-05 11:12:34

C++

2022-01-14 09:10:56

C++文件Linux

2011-07-13 18:24:18

C++

2020-07-30 12:40:35

CC++編程語言

2022-07-01 11:56:54

C語言C++編程語言

2010-01-22 15:30:36

C++語言

2024-02-21 14:55:19

C++語言編程

2010-01-15 14:46:20

C++語言
點贊
收藏

51CTO技術棧公眾號

美女黄色成人网| 粉嫩的18在线观看极品精品| 国产日韩欧美精品一区| 国产精品电影网站| 亚洲无人区码一码二码三码的含义| 在线观看欧美日韩电影| 国产午夜亚洲精品不卡| 92看片淫黄大片看国产片| 精品在线视频免费观看| 欧美综合视频| 日韩免费性生活视频播放| 日本一道本久久| 91视频在线观看| 国产自产高清不卡| 欧美在线视频一区| 日韩精品123区| 日本一道高清一区二区三区| 欧美精品在线观看播放| 国产成人永久免费视频| 国产福利小视频在线观看| 国产不卡在线视频| 国产免费一区二区三区在线能观看 | 亚洲护士老师的毛茸茸最新章节| 天堂av在线网站| 成人影院在线播放| 中文字幕中文字幕一区二区| 久久婷婷开心| 亚洲风情第一页| 日本不卡不码高清免费观看| 91精品国产高清自在线| 亚洲一级生活片| 北条麻妃国产九九九精品小说| 亚洲白虎美女被爆操| 天天摸天天舔天天操| 亚洲黄色网址| 黄色精品在线看| 国产 国语对白 露脸| 91网在线播放| 欧美韩国一区二区| 欧美日韩在线高清| 欧洲成人一区二区三区| 国产精品自拍网站| 成人午夜小视频| 日本妇乱大交xxxxx| 久久高清国产| 秋霞av国产精品一区| 日韩乱码在线观看| 亚洲高清电影| 97国产精品视频| 欧美激情国产精品免费| 自拍欧美日韩| xxxxxxxxx欧美| 99成人在线观看| 97精品视频在线看| 精品国产网站地址| 国产又粗又硬又长又爽| 久久中文亚洲字幕| 色悠悠久久88| 欧美美女性生活视频| 色婷婷综合网| 久久精品成人欧美大片古装| 久久99久久99精品免费看小说| 欧美色图国产精品| 最新国产精品亚洲| 麻豆网址在线观看| 在线观看免费一区二区| 欧美另类交人妖| 国产中文字字幕乱码无限| 亚洲精品极品| 日本一区二区三区在线播放| 久久久久亚洲视频| 免费看精品久久片| 成人中文字幕+乱码+中文字幕| 国产精品伦理一区| 国产成人aaaa| 久久综合福利| 91网在线播放| 亚洲午夜久久久久久久久电影网 | 成人高潮aa毛片免费| 亚洲成av人片一区二区三区| 日本www在线播放| 欧美aaa大片视频一二区| 欧美日本高清视频在线观看| 国内av免费观看| 风间由美性色一区二区三区四区| 国产丝袜高跟一区| 一区二区三区在线播放视频| 欧美日本免费| 日韩av不卡在线| 国产精品一品二区三区的使用体验| 丰满白嫩尤物一区二区| 麻豆传媒一区二区| 欧美黑人激情| 婷婷久久综合九色综合伊人色| 国产精品无码av无码| 成人豆花视频| 精品调教chinesegay| 人与动物性xxxx| 国产精品综合| 亚洲www永久成人夜色| 午夜小视频免费| 亚洲欧洲另类国产综合| 欧美 丝袜 自拍 制服 另类| 少妇高潮一区二区三区99| 亚洲国产精品久久久| 超碰人人人人人人人| 伊人久久亚洲美女图片| 国产日韩精品一区二区| 天堂资源中文在线| 亚洲欧美激情在线| 精品久久久久久无码国产| 亚洲一区二区电影| 中文字幕成人精品久久不卡| 日韩黄色精品视频| 精品写真视频在线观看| 免费国产一区二区| 污视频在线免费观看网站| 欧美伊人久久大香线蕉综合69| 黄色在线免费播放| 亚洲影视一区| 国产精品免费一区豆花| 午夜国产在线观看| 一级中文字幕一区二区| www.99r| 亚洲人成网www| 欧美精品成人在线| 99产精品成人啪免费网站| 国产欧美日韩精品在线| 国产最新免费视频| av不卡一区| 欧美区在线播放| 国产精品毛片一区视频播| 国产午夜精品在线观看| 99re在线视频免费观看| 盗摄牛牛av影视一区二区| 久久国产精品视频| 国产精品午夜福利| 中文字幕亚洲一区二区av在线 | 亚洲欧美电影在线观看| 日韩精品99| 亚洲精品中文字幕有码专区| 国产成人在线免费视频| 不卡视频免费播放| 成人性生活视频免费看| 97品白浆高清久久久久久| 欧美美女操人视频| 超碰在线播放97| 亚洲黄色小视频| 97超碰免费在线观看| 在线中文一区| 91青青草免费观看| 自由的xxxx在线视频| 欧美一级久久久久久久大片| 中文字幕五月天| 国产精品18久久久久久久久久久久| 国产av不卡一区二区| 国产精久久一区二区| 欧美成人中文字幕在线| 亚洲免费成人在线| 午夜精品福利一区二区蜜股av| 成人性生活免费看| 久久久久免费| 亚洲一二区在线| 精品久久国产一区| 欧美激情一区二区三区久久久 | 亚洲精品在线看| 4438国产精品一区二区| 国产欧美日韩在线| 污污视频在线免费| 国产精品v一区二区三区| 国产伦精品一区二区三区视频黑人| 丁香花在线观看完整版电影| 亚洲精品第一页| 久久精品五月天| 国产精品伦一区| ass极品水嫩小美女ass| 在线亚洲伦理| 午夜精品亚洲一区二区三区嫩草 | 岛国片在线免费观看| 狠狠色2019综合网| 国产成人一区二区三区别| 久久精品亚洲成在人线av网址| 欧美在线欧美在线| 91精彩视频在线播放| 日韩三级视频中文字幕| 久热这里只有精品6| 国产日产精品一区| 天天久久综合网| 亚洲国产精品一区| 午夜精品视频在线观看一区二区| 视频一区视频二区欧美| 91成人性视频| 麻豆av在线导航| 亚洲国产精品福利| 一级欧美一级日韩| 精品福利免费观看| 欧美h片在线观看| 91婷婷韩国欧美一区二区| 岛国毛片在线播放| 国产免费成人| 成人一区二区av| 国产一区二区精品福利地址| 91美女片黄在线观看游戏| 国产亚洲成av人片在线观看| 色小说视频一区| 久久综合久久久| 99re在线视频| 亚洲第一精品夜夜躁人人躁 | 国产午夜在线视频| 日韩网站在线看片你懂的| 一级黄色大片视频| 国产精品美女久久久久久| 色综合久久久无码中文字幕波多| 在线观看日韩av电影| 亚洲视频电影| 精品一区免费| 国产综合动作在线观看| www.欧美视频| 国产精品久久久久久久久久久不卡 | 欧美xxxx做受欧美.88| 精品视频一二三| 亚洲第一免费播放区| 国产精品国产三级国产普通话对白 | yourporn久久国产精品| 狠狠操狠狠干视频| 日韩影院免费视频| 日本三级免费网站| 亚洲高清二区| 日日摸日日碰夜夜爽无码| 欧美1区3d| 欧美少妇一级片| 国产精品二区不卡| 亚洲欧洲精品在线 | 国产一区精品福利| 日韩av三级在线观看| 美女网站在线看| 久久久亚洲福利精品午夜| a视频在线观看| 久久手机精品视频| 久草资源在线观看| 色偷偷亚洲男人天堂| 97电影在线看视频| 欲色天天网综合久久| 黄色片在线免费看| 亚洲欧美国产精品久久久久久久 | 天堂网av手机版| 香蕉成人伊视频在线观看| 免费三片在线播放| 亚洲一区二区三区激情| 不卡的免费av| 黄色成人在线免费| 欧美超碰在线观看| 91福利视频网站| 亚洲免费视频二区| 精品视频一区 二区 三区| 中文字幕一二区| 欧美日韩一区二区三区四区五区| 国内av在线播放| 欧美另类变人与禽xxxxx| 国产精品久久久久久免费免熟| 91精品国产综合久久久久久久久久 | 亚洲乱码视频| 99999精品视频| 日韩成人免费看| 手机免费av片| 福利视频网站一区二区三区| 波多野结衣加勒比| 久久新电视剧免费观看| 性欧美精品中出| 中文字幕一区二区三区四区不卡| 青娱乐91视频| 欧美性高潮在线| 一区二区视频播放| 日韩午夜激情电影| 天天躁日日躁狠狠躁喷水| 亚洲视频欧洲视频| 黄色片网站在线观看| 色综合视频网站| 吉吉日韩欧美| 成人黄色在线观看| 在线视频亚洲欧美中文| 精品乱子伦一区二区三区| 精品国产91| 男同互操gay射视频在线看| 亚洲先锋成人| 老司机午夜av| 国产乱人伦偷精品视频不卡| 中文在线永久免费观看| 欧美国产丝袜视频| 国产一级理论片| 在线观看av不卡| 午夜免费福利视频| 亚洲午夜精品视频| 午夜在线激情影院| 国产成人在线亚洲欧美| 国产日韩在线观看视频| 精品一区久久| 亚洲一级毛片| 日韩欧美精品在线观看视频| 久99久精品视频免费观看| 午夜剧场免费看| 国产精品久久久久一区二区三区 | 国产三区在线观看| 国产91对白在线播放| 99re8精品视频在线观看| 久久综合毛片| 欧美婷婷在线| 欧美午夜aaaaaa免费视频| 菠萝蜜视频在线观看一区| 任我爽在线视频| 色诱视频网站一区| 亚洲欧美国产高清va在线播放| 在线免费看av不卡| 一个人看的www视频在线免费观看| 成人在线播放av| 青青草原综合久久大伊人精品 | а√天堂8资源中文在线| 成人激情在线观看| 欧美精美视频| 国产 日韩 欧美在线| 国产在线国偷精品产拍免费yy| 一区二区三区伦理片| 午夜精品视频一区| 国产福利资源在线| 日韩视频精品在线| 成人午夜sm精品久久久久久久| 官网99热精品| 亚洲影视一区二区三区| 中文字幕精品一区二区三区在线| 久久久久久久综合色一本| 日本污视频在线观看| 日韩欧美激情四射| 高h视频在线观看| 国产在线高清精品| 日韩av密桃| 免费看污污网站| 国产亚洲欧美激情| 最新中文字幕一区| 亚洲国产精品久久久久秋霞不卡| 日韩精品分区| 99三级在线| 欧美国产另类| 苍井空张开腿实干12次| 一区二区三区四区精品在线视频| 91中文字幕在线播放| 日韩中文字幕在线看| 日韩伦理一区二区| 一区二区不卡在线观看| 久久99深爱久久99精品| 国产又色又爽又高潮免费 | www香蕉视频| 欧美日产国产成人免费图片| 欧美高清一级片| 日本a在线天堂| 波多野结衣一区二区三区| 日本一区二区免费在线观看| 亚洲黄色av女优在线观看| 欧美一级鲁丝片| 欧美精品v日韩精品v国产精品| 天堂在线亚洲视频| 精品人妻一区二区三区四区| 欧美吞精做爰啪啪高潮| 免费超碰在线| 91入口在线观看| 怡红院精品视频在线观看极品| 国产黄色三级网站| 日本精品一级二级| 91吃瓜网在线观看| 亚洲bt天天射| 亚洲国产专区| 亚洲精品国产熟女久久久| 欧美性色综合网| 18+视频在线观看| 国精产品99永久一区一区| 久久久久久9| 裸体武打性艳史| 亚洲精品国产成人| 日韩中文视频| 热久久最新地址| 久久一二三国产| 国产精品特级毛片一区二区三区| 欧美另类69精品久久久久9999| 午夜欧洲一区| 超碰人人草人人| 精品日韩视频在线观看| av网站在线免费观看| 2019国产精品视频| 亚洲一区观看| 一区二区三区四区五区| 亚洲电影免费观看高清| 成人免费一区| 久无码久无码av无码| 国产清纯白嫩初高生在线观看91 | 99精品在线免费| 亚洲一级av毛片| 性欧美xxxx视频在线观看| 成人免费电影网址| 亚洲香蕉中文网| 欧美日韩免费高清一区色橹橹| 久草在线资源站资源站|