亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C++ > 正文

詳解C++中基類與派生類的轉(zhuǎn)換以及虛基類

2020-05-23 14:14:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了詳解C++中基類與派生類的轉(zhuǎn)換以及虛基類,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

C++基類與派生類的轉(zhuǎn)換

在公用繼承、私有繼承和保護(hù)繼承中,只有公用繼承能較好地保留基類的特征,它保留了除構(gòu)造函數(shù)和析構(gòu)函數(shù)以外的基類所有成員,基類的公用或保護(hù)成員的訪問(wèn)權(quán)限在派生類中全部都按原樣保留下來(lái)了,在派生類外可以調(diào)用基類的公用成員函數(shù)訪問(wèn)基類的私有成員。因此,公用派生類具有基類的全部功能,所有基類能夠?qū)崿F(xiàn)的功能, 公用派生類都能實(shí)現(xiàn)。而非公用派生類(私有或保護(hù)派生類)不能實(shí)現(xiàn)基類的全部功能(例如在派生類外不能調(diào)用基類的公用成員函數(shù)訪問(wèn)基類的私有成員)。因此,只有公用派生類才是基類真正的子類型,它完整地繼承了基類的功能。

不同類型數(shù)據(jù)之間在一定條件下可以進(jìn)行類型的轉(zhuǎn)換,例如整型數(shù)據(jù)可以賦給雙精度型變量,在賦值之前,把整型數(shù)據(jù)先轉(zhuǎn)換成為雙精度型數(shù)據(jù),但是不能把一個(gè)整型數(shù)據(jù)賦給指針變量。這種不同類型數(shù)據(jù)之間的自動(dòng)轉(zhuǎn)換和賦值,稱為賦值兼容?,F(xiàn)在要討論 的問(wèn)題是:基類與派生類對(duì)象之間是否也有賦值兼容的關(guān)系,可否進(jìn)行類型間的轉(zhuǎn)換?

回答是可以的?;惻c派生類對(duì)象之間有賦值兼容關(guān)系,由于派生類中包含從基類繼承的成員,因此可以將派生類的值賦給基類對(duì)象,在用到基類對(duì)象的時(shí)候可以用其子類對(duì)象代替。具體表現(xiàn)在以下幾個(gè)方面。

1) 派生類對(duì)象可以向基類對(duì)象賦值

可以用子類(即公用派生類)對(duì)象對(duì)其基類對(duì)象賦值。如

 

 
  1. A a1; //定義基類A對(duì)象a1 
  2. B b1; //定義類A的公用派生類B的對(duì)象b1 
  3. a1=b1; //用派生類B對(duì)象b1對(duì)基類對(duì)象a1賦值 

在賦值時(shí)舍棄派生類自己的成員。也就是“大材小用”,如圖

詳解C++中基類與派生類的轉(zhuǎn)換以及虛基類

實(shí)際上,所謂賦值只是對(duì)數(shù)據(jù)成員賦值,對(duì)成員函數(shù)不存在賦值問(wèn)題。

請(qǐng)注意,賦值后不能企圖通過(guò)對(duì)象a1去訪問(wèn)派生類對(duì)象b1的成員,因?yàn)閎1的成員與a1的成員是不同的。假設(shè)age是派生類B中增加的公用數(shù)據(jù)成員,分析下面的用法:

a1.age=23; //錯(cuò)誤,a1中不包含派生類中增加的成員

b1.age=21; //正確,b1中包含派生類中增加的成員

應(yīng)當(dāng)注意,子類型關(guān)系是單向的、不可逆的。B是A的子類型,不能說(shuō)A是B的子類型。只能用子類對(duì)象對(duì)其基類對(duì)象賦值,而不能用基類對(duì)象對(duì)其子類對(duì)象賦值,理由是顯然的,因?yàn)榛悓?duì)象不包含派生類的成員,無(wú)法對(duì)派生類的成員賦值。同理,同一基類的不同派生類對(duì)象之間也不能賦值。

2) 派生類對(duì)象可以替代基類對(duì)象向基類對(duì)象的引用進(jìn)行賦值或初始化

如已定義了基類A對(duì)象a1,可以定義a1的引用變量:

 

 
  1. A a1; //定義基類A對(duì)象a1 
  2. B b1; //定義公用派生類B對(duì)象b1 
  3. A& r=a1; //定義基類A對(duì)象的引用變量r,并用a1對(duì)其初始化 

這時(shí),引用變量r是a1的別名,r和a1共享同一段存儲(chǔ)單元。也可以用子類對(duì)象初始化引用變量r,將上面最后一行改為

 

 
  1. A& r=b1; //定義基類A對(duì)象的引用變量r,并用派生類B對(duì)象b1對(duì)其初始化 

或者保留上面第3行“A& r=a1;”,而對(duì)r重新賦值:

 

 
  1. r=b1; //用派生類B對(duì)象b1對(duì)a1的引用變量r賦值 

注意,此時(shí)r并不是b1的別名,也不與b1共享同一段存儲(chǔ)單元。它只是b1中基類部分的別名,r與b1中基類部分共享同一段存儲(chǔ)單元,r與b1具有相同的起始地址。

3) 如果函數(shù)的參數(shù)是基類對(duì)象或基類對(duì)象的引用,相應(yīng)的實(shí)參可以用子類對(duì)象。

如有一函數(shù):

 

 
  1. fun: void fun(A& r) //形參是類A的對(duì)象的引用變量 
  2. cout<<r.num<<endl; 
  3. //輸出該引用變量的數(shù)據(jù)成員num 

函數(shù)的形參是類A的對(duì)象的引用變量,本來(lái)實(shí)參應(yīng)該為A類的對(duì)象。由于子類對(duì)象與派生類對(duì)象賦值兼容,派生類對(duì)象能自動(dòng)轉(zhuǎn)換類型,在調(diào)用fun函數(shù)時(shí)可以用派生類B的對(duì)象b1作實(shí)參:

 

 
  1. fun(b1); 

輸出類B的對(duì)象b1的基類數(shù)據(jù)成員num的值。

與前相同,在fun函數(shù)中只能輸出派生類中基類成員的值。

4) 派生類對(duì)象的地址可以賦給指向基類對(duì)象的指針變量,也就是說(shuō),指向基類對(duì)象的指針變量也可以指向派生類對(duì)象。

[例] 定義一個(gè)基類Student(學(xué)生),再定義Student類的公用派生類Graduate(研究生), 用指向基類對(duì)象的指針輸出數(shù)據(jù)。本例主要是說(shuō)明用指向基類對(duì)象的指針指向派生類對(duì)象,為了減少程序長(zhǎng)度,在每個(gè)類中只設(shè)很少成員。學(xué)生類只設(shè)num(學(xué)號(hào)),name(名字)和score(成績(jī))3個(gè)數(shù)據(jù)成員,Graduate類只增加一個(gè)數(shù)據(jù)成員pay(工資)。程序如下:

 

 
  1. #include <iostream> 
  2. #include <string> 
  3. using namespace std; 
  4. class Student//聲明Student類 
  5. public
  6. Student(int, string,float); //聲明構(gòu)造函數(shù) 
  7. void display( ); //聲明輸出函數(shù) 
  8. private
  9. int num; 
  10. string name; 
  11. float score; 
  12. }; 
  13. Student::Student(int n, string nam,float s) //定義構(gòu)造函數(shù) 
  14. num=n; 
  15. name=nam; 
  16. score=s; 
  17. void Student::display( ) //定義輸出函數(shù) 
  18. cout<<endl<<"num:"<<num<<endl; 
  19. cout<<"name:"<<name<<endl; 
  20. cout<<"score:"<<score<<endl; 
  21. class Graduate:public Student //聲明公用派生類Graduate 
  22. public
  23. Graduate(int, string ,float,float); //聲明構(gòu)造函數(shù) 
  24. void display( ); //聲明輸出函數(shù) 
  25. private
  26. float pay; //工資 
  27. }; 
  28. //定義構(gòu)造函數(shù) 
  29. Graduate::Graduate(int n, string nam,float s,float p):Student(n,nam,s),pay(p){ } 
  30. void Graduate::display() //定義輸出函數(shù) 
  31. Student::display(); //調(diào)用Student類的display函數(shù) 
  32. cout<<"pay="<<pay<<endl; 
  33. int main() 
  34. Student stud1(1001,"Li",87.5); //定義Student類對(duì)象stud1 
  35. Graduate grad1(2001,"Wang",98.5,563.5); //定義Graduate類對(duì)象grad1 
  36. Student *pt=&stud1; //定義指向Student類對(duì)象的指針并指向stud1 
  37. pt->display( ); //調(diào)用stud1.display函數(shù) 
  38. pt=&grad1; //指針指向grad1 
  39. pt->display( ); //調(diào)用grad1.display函數(shù) 

下面對(duì)程序的分析很重要,請(qǐng)大家仔細(xì)閱讀和思考。

很多讀者會(huì)認(rèn)為,在派生類中有兩個(gè)同名的display成員函數(shù),根據(jù)同名覆蓋的規(guī)則,被調(diào)用的應(yīng)當(dāng)是派生類Graduate對(duì)象的display函數(shù),在執(zhí)行Graduate::display函數(shù)過(guò)程中調(diào)用Student::display函數(shù),輸出num,name,score,然后再輸出pay的值。

事實(shí)上這種推論是錯(cuò)誤的,先看看程序的輸出結(jié)果:

 

  1. num:1001 
  2. name:Li 
  3. score:87.5 
  4.  
  5. num:2001 
  6. name:wang 
  7. score:98.5 

前3行是學(xué)生stud1的數(shù)據(jù),后3行是研究生grad1的數(shù)據(jù),并沒(méi)有輸出pay的值。

問(wèn)題在于pt是指向Student類對(duì)象的指針變量,即使讓它指向了grad1,但實(shí)際上pt指向的是grad1中從基類繼承的部分。

通過(guò)指向基類對(duì)象的指針,只能訪問(wèn)派生類中的基類成員,而不能訪問(wèn)派生類增加的成員。所以pt->display()調(diào)用的不是派生類Graduate對(duì)象所增加的display函數(shù),而是基類的display函數(shù),所以只輸出研究生grad1的num,name,score3個(gè)數(shù)據(jù)。

如果想通過(guò)指針輸出研究生grad1的pay,可以另設(shè)一個(gè)指向派生類對(duì)象的指針變量ptr,使它指向grad1,然后用ptr->display()調(diào)用派生類對(duì)象的display函數(shù)。但這不大方便。

通過(guò)本例可以看到,用指向基類對(duì)象的指針變量指向子類對(duì)象是合法的、安全的,不會(huì)出現(xiàn)編譯上的錯(cuò)誤。但在應(yīng)用上卻不能完全滿足人們的希望,人們有時(shí)希望通過(guò)使用基類指針能夠調(diào)用基類和子類對(duì)象的成員。如果能做到這點(diǎn),程序人員會(huì)感到方便。后續(xù)章節(jié)將會(huì)解決這個(gè)問(wèn)題。辦法是使用虛函數(shù)和多態(tài)性。

C++虛基類詳解

多繼承時(shí)很容易產(chǎn)生命名沖突,即使我們很小心地將所有類中的成員變量和成員函數(shù)都命名為不同的名字,命名沖突依然有可能發(fā)生,比如非常經(jīng)典的菱形繼承層次。如下圖所示:

詳解C++中基類與派生類的轉(zhuǎn)換以及虛基類

類A派生出類B和類C,類D繼承自類B和類C,這個(gè)時(shí)候類A中的成員變量和成員函數(shù)繼承到類D中變成了兩份,一份來(lái)自 A-->B-->D 這一路,另一份來(lái)自 A-->C-->D 這一條路。

在一個(gè)派生類中保留間接基類的多份同名成員,雖然可以在不同的成員變量中分別存放不同的數(shù)據(jù),但大多數(shù)情況下這是多余的:因?yàn)楸A舳喾莩蓡T變量不僅占用較多的存儲(chǔ)空間,還容易產(chǎn)生命名沖突,而且很少有這樣的需求。

為了解決這個(gè)問(wèn)題,C++提供了虛基類,使得在派生類中只保留間接基類的一份成員。

聲明虛基類只需要在繼承方式前面加上 virtual 關(guān)鍵字,請(qǐng)看下面的例子:

 

 
  1. #include <iostream> 
  2. using namespace std; 
  3. class A{ 
  4. protected
  5. int a; 
  6. public
  7. A(int a):a(a){} 
  8. }; 
  9. class B: virtual public A{ //聲明虛基類 
  10. protected
  11. int b; 
  12. public
  13. B(int a, int b):A(a),b(b){} 
  14. }; 
  15. class C: virtual public A{ //聲明虛基類 
  16. protected
  17. int c; 
  18. public
  19. C(int a, int c):A(a),c(c){} 
  20. }; 
  21. class D: virtual public B, virtual public C{ //聲明虛基類 
  22. private
  23. int d; 
  24. public
  25. D(int a, int b, int c, int d):A(a),B(a,b),C(a,c),d(d){} 
  26. void display(); 
  27. }; 
  28. void D::display(){ 
  29. cout<<"a="<<a<<endl; 
  30. cout<<"b="<<b<<endl; 
  31. cout<<"c="<<c<<endl; 
  32. cout<<"d="<<d<<endl; 
  33. int main(){ 
  34. (new D(1, 2, 3, 4)) -> display(); 
  35. return 0; 

運(yùn)行結(jié)果:

 

 
  1. a=1 
  2. b=2 
  3. c=3 
  4. d=4 

本例中我們使用了虛基類,在派生類D中只有一份成員變量 a 的拷貝,所以在 display() 函數(shù)中可以直接訪問(wèn) a,而不用加類名和域解析符。

請(qǐng)注意派生類D的構(gòu)造函數(shù),與以往的用法有所不同。以往,在派生類的構(gòu)造函數(shù)中只需負(fù)責(zé)對(duì)其直接基類初始化,再由其直接基類負(fù)責(zé)對(duì)間接基類初始化?,F(xiàn)在,由于虛基類在派生類中只有一份成員變量,所以對(duì)這份成員變量的初始化必須由派生類直接給出。如果不由最后的派生類直接對(duì)虛基類初始化,而由虛基類的直接派生類(如類B和類C)對(duì)虛基類初始化,就有可能由于在類B和類C的構(gòu)造函數(shù)中對(duì)虛基類給出不同的初始化參數(shù)而產(chǎn)生矛盾。所以規(guī)定:在最后的派生類中不僅要負(fù)責(zé)對(duì)其直接基類進(jìn)行初始化,還要負(fù)責(zé)對(duì)虛基類初始化。

有的讀者會(huì)提出:類D的構(gòu)造函數(shù)通過(guò)初始化表調(diào)了虛基類的構(gòu)造函數(shù)A,而類B和類C的構(gòu)造函數(shù)也通過(guò)初始化表調(diào)用了虛基類的構(gòu)造函數(shù)A,這樣虛基類的構(gòu)造函數(shù)豈非被調(diào)用了3次?大家不必過(guò)慮,C++編譯系統(tǒng)只執(zhí)行最后的派生類對(duì)虛基類的構(gòu)造函數(shù)的調(diào)用,而忽略虛基類的其他派生類(如類B和類C)對(duì)虛基類的構(gòu)造函數(shù)的調(diào)用,這就保證了虛基類的數(shù)據(jù)成員不會(huì)被多次初始化。

最后請(qǐng)注意:為了保證虛基類在派生類中只繼承一次,應(yīng)當(dāng)在該基類的所有直接派生類中聲明為虛基類,否則仍然會(huì)出現(xiàn)對(duì)基類的多次繼承。

可以看到:使用多重繼承時(shí)要十分小心,經(jīng)常會(huì)出現(xiàn)二義性問(wèn)題。上面的例子是簡(jiǎn)單的,如果派生的層次再多一些,多重繼承更復(fù)雜一些,程序員就很容易陷人迷 魂陣,程序的編寫(xiě)、調(diào)試和維護(hù)工作都會(huì)變得更加困難。因此很多程序員不提倡在程序中使用多重繼承,只有在比較簡(jiǎn)單和不易出現(xiàn)二義性的情況或?qū)嵲诒匾獣r(shí)才使用多重繼承,能用單一繼承解決的問(wèn)題就不要使用多重繼承。也正由于這個(gè)原因,C++之后的很多面向?qū)ο蟮木幊陶Z(yǔ)言(如Java、Smalltalk、C#、PHP等)并不支持多重繼承。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
永久免费网站视频在线观看| 欧美综合视频在线观看| 在线免费91| 国产精品欧美大片| 国产高清不卡视频| 国产51人人成人人人人爽色哟哟| wwwxxx免费| 黑人巨大国产9丨视频| 国产在线久久久| 欧美视频小说| 成人国产精品一级毛片视频| 国产精品久久久国产盗摄| 午夜精品国产精品大乳美女| 影院欧美亚洲| 国产精自产拍久久久久久蜜| 360天大佬第二季在线观看| 欧美国产综合| 成人女性文胸| 91高清免费视频| 男女男精品视频网| 好好的日comwww| 日韩精品在线免费观看| 亚洲调教一区| 欧美日韩dvd在线观看| 国产美女精品一区二区三区| 免费的黄色片| 久久夜色精品国产噜噜av小说| 国产喷水福利在线视频| 日本高清视频在线观看| 强伦人妻一区二区三区| www.超级碰| 五月激情五月婷婷| 91啦中文成人| 欧美日韩综合久久| 亚洲精品色午夜无码专区日韩| 男男成人高潮片免费网站| 亚洲黄色小视频在线观看| 欧美日韩午夜爽爽| 日韩在线第一区| 大伊香蕉精品在线品播放| 久久91视频| 欧美天堂视频| 国产精品久久久精品| 久久三级福利| 国产成人久久久久| 操人视频欧美| 国内精品伊人| 狠狠久久五月精品中文字幕| 亚洲精品成人精品456| 美女日批视频在线观看| 日本在线观看免费| 欧美资源一区| 亚洲在线观看| 色在线视频网| 91麻豆免费在线观看| 老熟妇高潮一区二区三区| 香蕉亚洲视频| 午夜久久tv| 日本不卡1区2区3区| 成人av资源网址| 国产乱子伦精品无码专区| 欧美日韩视频在线第一区| 高清av影院| 女人天堂在线| 亚洲自拍另类综合| 精品国产一区二区三区免费| 91免费精品国偷自产在线| 久久久一区二区| 人九九综合九九宗合| 久久久久久久久久一区二区三区| 91成人伦理在线电影| 午夜精品美女久久久久av福利| 香蕉视频免费在线| 紧身裙女教师波多野结衣| 中文字幕有码在线观看| 日本99精品| 国产网站免费看| 日韩一级网站| 日本熟妇乱子伦xxxx| 午夜精品一区二区三级视频| 日本不卡视频在线播放| 三上悠亚影音先锋| 国产视频第一页在线观看| 日韩在线欧美在线| 99热这里精品| 久久亚洲国产中v天仙www| 成人写真福利网| luxu259在线中文字幕| 色欲av无码一区二区三区| 日韩av最新在线| 日韩精品一区二区三区视频| 激情亚洲成人| 欧美激情亚洲国产| 国产综合福利在线| 亚洲精品一线| 一本大道久久a久久综合婷婷| 国产在线观看不卡一区二区三区| 色综合888| 日韩欧美美女在线观看| 亚洲一级在线观看| 久久精品中文字幕一区二区三区| 宅男噜噜噜66国产精品免费| 国产黄色特级片| 国产又粗又猛又爽又| 中文字幕亚洲欧美| 日韩精品在线观看免费| 欧美日韩国产二区| 日韩精品一区二区亚洲av观看| 无人视频在线观看免费| 一区二区三区在线|网站| 欧美性色综合网| 免费特级黄毛片| 极品国产91在线网站| 日本免费视频在线观看| 手机在线一区二区三区| 视频一区三区| 亚洲一区二区视频在线播放| 97伦伦午夜电影理伦片| 97超视频在线观看| 久久精品.com| 亚洲精品一区二区精华| 狠狠色噜噜狠狠狠| 久久新电视剧免费观看| 日韩欧美不卡在线观看视频| 精品国产免费人成在线观看| 久久性感美女视频| 国产综合久久久久久| 欧美三级午夜理伦三级小说| 久久一区二区三区视频| 一本大道久久加勒比香蕉| 德国性xxxx| 丝袜美腿亚洲一区二区图片| 国产精品久久99| 日韩人妻无码精品久久久不卡| 亚洲色图在线看| 一区二区日韩免费看| 97久精品国产片一区二区三区| 国产91在线视频观看| 先锋影音av资源在线| 免费在线毛片网站| 欧美成人免费网站| 日本人妻丰满熟妇久久久久久| 一区二区欧美视频| 色吧亚洲日本| 欧美艹逼视频| 日韩一级理论片| 波多野结衣免费观看| 欧美一区激情| 国产精品激情自拍| 亚洲三级网页| 91看片一区| 国产在线综合视频| 久久撸在线视频| 午夜一区二区三区视频| 日本福利片高清在线观看| 亚洲国产成人二区| 亚洲区 欧美区| 91网址在线播放| 国产精品国产自产拍高清av水多| 99久久夜色精品国产亚洲1000部| 亚洲xxx在线| 亚洲人体大胆视频| 久久久一区二区三区捆绑**| 国产精品探花一区二区在线观看| 欧美精品一区二区久久| 成人av资源在线播放| av电影院在线看| 成人av在线资源网| 亚洲精品中文字幕av| 欧美特大特白屁股xxxx| 高潮精品一区videoshd| 99视频国产精品免费观看| 国产三级精品视频| 国产精品爽爽久久久久久| 日韩在线你懂的| 麻豆tv免费在线观看| 欧美午夜www高清视频| 亚洲波多野结衣| 日本加勒比高清在线| 91小视频在线观看| www精品国产| 亚洲午夜精品久久久中文影院av| 中文字幕人成高视频| 国产亚洲1区2区3区| 欧美四级剧情无删版影片| 天天草天天干| 99久久国产综合精品麻豆| 国产小视频精品| 色影院视频在线| 97超碰国产一区二区三区| 97影院手机在线观看| 国产精品观看在线亚洲人成网| av在线这里只有精品| 91黑人精品一区二区三区| 99久热在线精品996热是什么| 中文字幕亚洲欧美日韩| 中文字幕9999| 欧美日韩精品久久久免费观看| 在线播放av更多| 欧美成人精品在线| 一个人免费播放在线视频看片| 麻豆国产在线| 日韩精品无码一区二区三区免费| 丁香六月综合激情| 九一在线视频| 久久一区二区三区超碰国产精品| 亚洲大胆人体av| 欧美精品一区二区三区在线看午夜| 久久新电视剧免费观看| a√天堂在线观看| 午夜精品一区在线观看| 欧美理论电影在线播放| 国产成人一二三区| 好吊日视频在线观看| 小小水蜜桃在线观看| 岛国电影中文在线| 国产在线日韩精品| 少妇激情一区二区三区| 亚洲精品国模| 久久久久久久久久久免费| 殴美一级特黄aaaaaa| 精品视频一区二区三区四区五区| av成人老司机| 国产伦精品一区二区三区视频免费| 97色伦图片97色伦在线电影| 国产一区二区三区久久久久久久久| 欧美色图五月天| 特一级黄色片| 久久精品一区二区免费播放| 免费无码毛片一区二区app| 在线免费国产视频| 99久热在线精品视频观看| 精品一区二区三区久久| 亚洲av无码片一区二区三区| 91日本在线视频| 成人精品视频久久久久| 久久久久中文字幕亚洲精品| 97se在线视频| 日本孕妇大胆孕交无码| 国产福利精品一区| 99久久免费国产精精品| 最新中文字幕在线播放| 粉嫩aⅴ一区二区三区| 国产精品成人久久久久| 成人黄色片视频网站| 欧美精品小视频| 亚洲一区二区三区涩| 手机看片日韩av| 日本一区二区视频在线观看| 亚洲欧洲日韩一区二区三区| 欧美变态xxxx| 非洲黑人最猛性xxxx交| 国产精品日韩一区二区| 美女黄色片视频| 色喇叭免费久久综合网| 成人做爽爽免费视频| japanese23hdxxxx日韩| 久久狠狠高潮亚洲精品| 亚洲图片欧美激情| 狠狠躁少妇一区二区三区| bdsm国产| 日本成人在线视频网址| 99视频在线免费观看| 国产欧美精品一区二区三区介绍| 狠色狠色综合久久| 主播国产精品| 天天爱天天做天天爽| 成人毛片18女人毛片| 日本在线一区二区| 久草在线免费资源| 中文在线免费一区三区高中清不卡| 国产又爽又黄的视频| 亚洲 欧美 国产 另类| av片在线免费看| 欧美日韩精品一区二区天天拍小说| 日韩一区二区三区在线| 日韩视频免费播放| 欧美 丝袜 自拍 制服 另类| 亚洲主播在线播放| 色乱码一区二区三区网站| 欧美区一区二区| 国产欧亚日韩视频| 精品欧美不卡一区二区在线观看| 91视频欧美| 98精品国产高清在线xxxx天堂| 在线天堂中文www视软件| 国产精品视频久久| 超碰在线观看免费版| 成人福利在线| 成人免费在线观看视频网站| 啊灬啊灬啊灬啊灬高潮在线看| 精品免费日产一区一区三区免费| 欧美gay男男猛男无套| 国产精品theporn动漫| 欧洲第一无人区观看| 91精品大全| 99国产欧美另类久久久精品| 日本久久久a级免费| 十大黄色软件免费看| 另类欧美日韩国产在线| 欧美亚州一区二区三区| 91看片在线免费观看| 国产在线一区二区视频| 成人做爰69片免费| 日韩欧美在线视频日韩欧美在线视频| 少妇人妻互换不带套| 国产精品一区在线| 欧美俄罗斯性视频| 欧美日韩在线播放一区| 五月天亚洲综合情| 久久久久成人黄色影片| 欧美午夜丰满在线18影院| 国产成人综合久久| 国产精品女主播| 国产一区二区三区av电影| 欧美日韩精品一区二区三区视频播放| 午夜精品999| 日本vs亚洲vs韩国一区三区| 黄污在线观看| 日本中文字幕精品—区二区| 中文字幕亚洲欧美日韩高清| 久久众筹精品私拍模特| 久久久精品人妻一区二区三区四| 色屁屁www国产馆在线观看| 黄色成人91| 公交车强行挺进岳身体| 日韩一区二区电影在线| 在线亚洲欧美日韩|