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

首頁 > 編程 > C++ > 正文

深入解析C++編程中的純虛函數(shù)和抽象類

2020-05-23 14:14:26
字體:
供稿:網(wǎng)友

這篇文章主要介紹了深入解析C++編程中的純虛函數(shù)和抽象類,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

C++純虛函數(shù)詳解

有時(shí)在基類中將某一成員函數(shù)定為虛函數(shù),并不是基類本身的要求,而是考慮到派生類的需要,在基類中預(yù)留了一個(gè)函數(shù)名,具體功能留給派生類根據(jù)需要去定義。

純虛函數(shù)是在聲明虛函數(shù)時(shí)被“初始化”為0的函數(shù)。聲明純虛函數(shù)的一般形式是

 

 
  1. virtual 函數(shù)類型 函數(shù)名 (參數(shù)表列) = 0; 

關(guān)于純虛函數(shù)需要注意的幾點(diǎn):

純虛函數(shù)沒有函數(shù)體;

最后面的“=0”并不表示函數(shù)返回值為0,它只起形式上的作用,告訴編譯系統(tǒng)“這是純虛函數(shù)”;

這是一個(gè)聲明語句,最后應(yīng)有分號。

純虛函數(shù)只有函數(shù)的名字而不具備函數(shù)的功能,不能被調(diào)用。它只是通知編譯系統(tǒng):“在這里聲明一個(gè)虛函數(shù),留待派生類中定義”。在派生類中對此函數(shù)提供定義后,它才能具備函數(shù)的功能,可被調(diào)用。

純虛函數(shù)的作用是在基類中為其派生類保留一個(gè)函數(shù)的名字,以便派生類根據(jù)需要對它進(jìn)行定義。

如果在基類中沒有保留函數(shù)名字,則無法實(shí)現(xiàn)多態(tài)性。如果在一個(gè)類中聲明了純虛函數(shù),而在其派生類中沒有對該函數(shù)定義,則該虛函數(shù)在派生類中仍然為純虛函數(shù)。

再談C++抽象類

如果聲明了一個(gè)類,一般可以用它定義對象。但是在面向?qū)ο蟪绦蛟O(shè)計(jì)中,往往有一些類,它們不用來生成對象。定義這些類的惟一目的是用它作為基類去建立派生類。它們作為一種基本類型提供給用戶,用戶在這個(gè)基礎(chǔ)上根據(jù)自己的需要定義出功能各異的派生類。用這些派生類去建立對象。

打個(gè)比方,汽車制造廠往往向客戶提供卡車的底盤(包括發(fā)動(dòng)機(jī)、傳動(dòng)部分、車輪等),組裝廠可以把它組裝成貨車、公共汽車、工程車或客車等不同功能的車輛。底盤本身不是車輛,要經(jīng)過加工才能成為車輛,但它是車輛的基本組成部分。它相當(dāng)于基類。在現(xiàn)代化的生產(chǎn)中,大多采用專業(yè)化的生產(chǎn)方式,充分利用專業(yè)化工廠生產(chǎn)的部件,加工集成為新品種的產(chǎn)品。生產(chǎn)公共汽車的廠家決不會(huì)從制造發(fā)動(dòng)機(jī)到生產(chǎn)輪胎、制造車廂都由本廠完成。其實(shí),不同品牌的電腦里面的基本部件是一樣的或相似的。這種觀念對軟件開發(fā)是十分重要的。一個(gè)優(yōu)秀的軟件工作者在開發(fā)一個(gè)大的軟件時(shí),決不會(huì)從頭到尾都由自己編寫程序代碼,他會(huì)充分利用已有資源(例如類庫)作為自己工作的基礎(chǔ)。

這種不用來定義對象而只作為一種基本類型用作繼承的類,稱為抽象類(abstract class ),由于它常用作基類,通常稱為抽象基類(abstract base class )。凡是包含純虛函數(shù)的類都是抽象類。因?yàn)榧兲摵瘮?shù)是不能被調(diào)用的,包含純虛函數(shù)的類是無法建立對象的。

抽象類的作用是作為一個(gè)類族的共同基類,或者說,為一個(gè)類族提供一個(gè)公共接口。一個(gè)類層次結(jié)構(gòu)中當(dāng)然也可不包含任何抽象類,每一層次的類都是實(shí)際可用的,可以用來建立對象的。

但是,許多好的面向?qū)ο蟮南到y(tǒng),其層次結(jié)構(gòu)的頂部是一個(gè)抽象類,甚至頂部有好幾層都是抽象類。

如果在抽象類所派生出的新類中對基類的所有純虛函數(shù)進(jìn)行了定義,那么這些函數(shù)就被賦予了功能,可以被調(diào)用。這個(gè)派生類就不是抽象類,而是可以用來定義對象的具體類(concrete class )。

如果在派生類中沒有對所有純虛函數(shù)進(jìn)行定義,則此派生類仍然是抽象類,不能用來定義對象。雖然抽象類不能定義對象(或者說抽象類不能實(shí)例化),但是可以定義指向抽象類數(shù)據(jù)的指針變量。當(dāng)派生類成為具體類之后,就可以用這種指針指向派生類對象,然后通過該指針調(diào)用虛函數(shù),實(shí)現(xiàn)多態(tài)性的操作。

幾個(gè)關(guān)于C++純虛函數(shù)與抽象類的實(shí)例

下面是一個(gè)完整的程序,為了便于閱讀,分段插入了一些文字說明。程序如下:

第(1)部分

 

  1. #include <iostream> 
  2. using namespace std; 
  3. //聲明抽象基類Shape 
  4. class Shape 
  5. public
  6. virtual float area( )const {return 0.0;} //虛函數(shù) 
  7. virtual float volume()const {return 0.0;} //虛函數(shù) 
  8. virtual void shapeName()const =0; //純虛函數(shù) 
  9. }; 

Shape類有3個(gè)成員函數(shù),沒有數(shù)據(jù)成員。3個(gè)成員函數(shù)都聲明為虛函數(shù),其中shapeName聲明為純虛函數(shù),因此Shape是一個(gè)抽象基類。shapeName函數(shù)的作用是輸出具體的形狀(如點(diǎn)、圓、圓柱體)的名字,這個(gè)信息是與相應(yīng)的派生類密切相關(guān)的,顯然這不應(yīng)當(dāng)在基類中定義,而應(yīng)在派生類中定義。所以把它聲明為純虛函數(shù)。Shape雖然是抽象基類,但是也可以包括某些成員的定義部分。類中兩個(gè)函數(shù)area(面積)和volume (體積)包括函數(shù)體,使其返回值為0(因?yàn)榭梢哉J(rèn)為點(diǎn)的面積和體積都為0)。由于考慮到在Point類中不再對area和volume函數(shù)重新定義,因此沒有把a(bǔ)rea和volume函數(shù)也聲明為純虛函數(shù)。在Point類中繼承了Shape類的area和volume函數(shù)。這3個(gè)函數(shù)在各派生類中都要用到。

第(2)部分

 

 
  1. //聲明Point類 
  2. class Point:public Shape//Point是Shape的公用派生類 
  3. public
  4. Point(float=0,float=0); 
  5. void setPoint(float ,float ); 
  6. float getX( )const {return x;} 
  7. float getY( )const {return y;} 
  8. virtual void shapeName( )const {cout<<"Point:";}//對虛函數(shù)進(jìn)行再定義 
  9. friend ostream & operator <<(ostream &,const Point &); 
  10. protected
  11. float x,y; 
  12. }; 
  13. //定義Point類成員函數(shù) 
  14. Point::Point(float a,float b) 
  15. {x=a;y=b;} 
  16. void Point::setPoint(float a,float b) 
  17. {x=a;y=b;} 
  18. ostream & operator <<(ostream &output,const Point &p) 
  19. output<<"["<<p.x<<","<<p.y<<"]"
  20. return output; 

Point從Shape繼承了3個(gè)成員函數(shù),由于“點(diǎn)”是沒有面積和體積的,因此不必重新定義area和volume。雖然在Point類中用不到這兩個(gè)函數(shù),但是Point類仍然從Shape類繼承了這兩個(gè)函數(shù),以便其派生類繼承它們。shapeName函數(shù)在Shape類中是純虛函數(shù), 在Point類中要進(jìn)行定義。Point類還有自己的成員函數(shù)( setPoint, getX, getY)和數(shù)據(jù)成 員(x和y)。

第(3)部分

 

 
  1. //聲明Circle類 
  2. class Circle:public Point 
  3. public
  4. Circle(float x=0,float y=0,float r=0); 
  5. void setRadius(float ); 
  6. float getRadius( )const
  7. virtual float area( )const
  8. virtual void shapeName( )const {cout<<"Circle:";}//對虛函數(shù)進(jìn)行再定義 
  9. friend ostream &operator <<(ostream &,const Circle &); 
  10. protected
  11. float radius; 
  12. }; 
  13. //聲明Circle類成員函數(shù) 
  14. Circle::Circle(float a,float b,float r):Point(a,b),radius(r){} 
  15. void Circle::setRadius(float r):radius(r){} 
  16. float Circle::getRadius( )const {return radius;} 
  17. float Circle::area( )const {return 3.14159*radius*radius;} 
  18. ostream &operator <<(ostream &output,const Circle &c) 
  19. output<<"["<<c.x<<","<<c.y<<"], r="<<c.radius; 
  20. return output; 

在Circle類中要重新定義area函數(shù),因?yàn)樾枰付ㄇ髨A面積的公式。由于圓沒有體積,因此不必重新定義volume函數(shù),而是從Point類繼承volume函數(shù)。shapeName函數(shù)是虛函數(shù),需要重新定義,賦予新的內(nèi)容(如果不重新定義,就會(huì)繼承Point類中的 shapeName函數(shù))。此外,Circle類還有自己新增加的成員函數(shù)(setRadius, getRadius)和數(shù)據(jù)成員(radius)。

第(4)部分

 

 
  1. //聲明Cylinder類 
  2. class Cylinder:public Circle 
  3. public
  4. Cylinder (float x=0,float y=0,float r=0,float h=0); 
  5. void setHeight(float ); 
  6. virtual float area( )const
  7. virtual float volume( )const
  8. virtual void shapeName( )const { 
  9. cout<<"Cylinder:"
  10. }//對虛函數(shù)進(jìn)行再定義 
  11. friend ostream& operator <<(ostream&,const Cylinder&); 
  12. protected
  13. float height; 
  14. }; 
  15. //定義Cylinder類成員函數(shù) 
  16. Cylinder::Cylinder(float a,float b,float r,float h):Circle(a,b,r),height(h){} 
  17. void Cylinder::setHeight(float h){height=h;} 
  18. float Cylinder::area( )const
  19. return 2*Circle::area( )+2*3.14159*radius*height; 
  20. float Cylinder::volume( )const
  21. return Circle::area( )*height; 
  22. ostream &operator <<(ostream &output,const Cylinder& cy){ 
  23. output<<"["<<cy.x<<","<<cy.y<<"], r="<<cy.radius<<", h="<<cy.height; 
  24. return output; 

Cylinder類是從Circle類派生的。由于圓柱體有表面積和體積,所以要對area和 volume函數(shù)重新定義。虛函數(shù)shapeName也需要重新定義。此外,Cylinder類還有自已 的成員函數(shù)setHeight和數(shù)據(jù)成員radius。

第(5)部分

 

 
  1. //main函數(shù) 
  2. int main( ) 
  3. Point point(3.2,4.5); //建立Point類對象point 
  4. Circle circle(2.4,1.2,5.6); 
  5. //建立Circle類對象circle 
  6. Cylinder cylinder(3.5,6.4,5.2,10.5); 
  7. //建立Cylinder類對象cylinder 
  8. point.shapeName(); 
  9. //靜態(tài)關(guān)聯(lián) 
  10. cout<<point<<endl; 
  11. circle.shapeName(); //靜態(tài)關(guān)聯(lián) 
  12. cout<<circle<<endl; 
  13. cylinder.shapeName(); //靜態(tài)關(guān)聯(lián) 
  14. cout<<cylinder<<endl<<endl; 
  15. Shape *pt; //定義基類指針 
  16. pt=&point; //指針指向Point類對象 
  17. pt->shapeName( ); //動(dòng)態(tài)關(guān)聯(lián) 
  18. cout<<"x="<<point.getX( )<<",y="<<point.getY( )<<"/narea="<<pt->area( ) 
  19. <<"/nvolume="<<pt->volume()<<"/n/n"
  20. pt=&circle; //指針指向Circle類對象 
  21. pt->shapeName( ); //動(dòng)態(tài)關(guān)聯(lián) 
  22. cout<<"x="<<circle.getX( )<<",y="<<circle.getY( )<<"/narea="<<pt->area( ) 
  23. <<"/nvolume="<<pt->volume( )<<"/n/n"
  24. pt=&cylinder; //指針指向Cylinder類對象 
  25. pt->shapeName( ); //動(dòng)態(tài)關(guān)聯(lián) 
  26. cout<<"x="<<cylinder.getX( )<<",y="<<cylinder.getY( )<<"/narea="<<pt->area( ) 
  27. <<"/nvolume="<<pt->volume( )<<"/n/n"
  28. return 0; 

在主函數(shù)中調(diào)用有關(guān)函數(shù)并輸出結(jié)果。先分別定義了 Point類對象point,Circle類對象circle和Cylinder類對象cylinder。然后分別通過對象名point, circle和cylinder調(diào)用 了shapeNanme函數(shù),這是屬于靜態(tài)關(guān)聯(lián),在編譯階段就能確定應(yīng)調(diào)用哪一個(gè)類的 shapeName函數(shù)。同時(shí)用重載的運(yùn)箅符“<<”來輸出各對象的信息,可以驗(yàn)證對象初始化是否正確。

再定義一個(gè)指向基類Shape對象的指針變量pt,使它先后指向3個(gè)派生類對象 point, Circle和cylinder,然后通過指針調(diào)用各函數(shù),如 pt->shapeName( ),pt ->area(), pt->volume( )。這時(shí)是通過動(dòng)態(tài)關(guān)聯(lián)分別確定應(yīng)該調(diào)用哪個(gè)函數(shù)。分別輸出不同類對象的信息。

程序運(yùn)行結(jié)果如下:

 

 
  1. Point:[3.2,4.5](Point類對象point的數(shù)據(jù):點(diǎn)的坐標(biāo)) 
  2. Circle:[2.4,1.2], r=5.6 (Circle類對象circle的數(shù)據(jù):圓心和半徑) 
  3. Cylinder:[3.5,6.4], r=5.5, h=10.5 (Cylinder類對象cylinder的數(shù)據(jù): 圓心、半徑和高) 
  4.  
  5. Point:x=3.2,y=4.5 (輸出Point類對象point的數(shù)據(jù):點(diǎn)的坐標(biāo)) 
  6. area=0 (點(diǎn)的面積) 
  7. volume=0 (點(diǎn)的體積) 
  8.  
  9. Circle:x=2.4,y=1.2 (輸出Circle類對象circle的數(shù)據(jù):圓心坐標(biāo)) 
  10. area=98.5203 (圓的面積) 
  11. volume=0 (圓的體積) 
  12. Cylinder:x=3.5,y=6.4 (輸出Cylinder類對象cylinder的數(shù)據(jù):圓心坐標(biāo)) 
  13. area=512.595 (圓的面積) 
  14. volume=891.96 (圓柱的體積) 

從本例可以進(jìn)一步明確以下結(jié)論:

一個(gè)基類如果包含一個(gè)或一個(gè)以上純虛函數(shù),就是抽象基類。抽象基類不能也不必要定義對象。

抽象基類與普通基類不同,它一般并不是現(xiàn)實(shí)存在的對象的抽象(例如圓形(Circle)就是千千萬萬個(gè)實(shí)際的圓的抽象),它可以沒有任何物理上的或其他實(shí)際意義方面的含義。

在類的層次結(jié)構(gòu)中,頂層或最上面的幾層可以是抽象基類。抽象基類體現(xiàn)了本類族中各類的共性,把各類中共有的成員函數(shù)集中在抽象基類中聲明。

抽象基類是本類族的公共接口?;蛘哒f,從同一基類派生出的多個(gè)類有同一接口。

區(qū)別靜態(tài)關(guān)聯(lián)和動(dòng)態(tài)關(guān)聯(lián)。如果是通過對象名調(diào)用虛函數(shù)(如point.shapeName()),在編譯階段就能確定調(diào)用的是哪一個(gè)類的虛函數(shù),所以屬于靜態(tài)關(guān)聯(lián)。 如果是通過基類指針調(diào)用虛函數(shù)(如pt ->shapeName()),在編譯階段無法從語句本身確定調(diào)用哪一個(gè)類的虛函數(shù),只有在運(yùn)行時(shí),pt指向某一類對象后,才能確定調(diào)用的是哪 一個(gè)類的虛函數(shù),故為動(dòng)態(tài)關(guān)聯(lián)。

如果在基類聲明了虛函數(shù),則在派生類中凡是與該函數(shù)有相同的函數(shù)名、函數(shù)類型、參數(shù)個(gè)數(shù)和類型的函數(shù),均為虛函數(shù)(不論在派生類中是否用virtual聲明)。

使用虛函數(shù)提高了程序的可擴(kuò)充性。把類的聲明與類的使用分離。這對于設(shè)計(jì)類庫的軟件開發(fā)商來說尤為重要。

開發(fā)商設(shè)計(jì)了各種各樣的類,但不向用戶提供源代碼,用戶可以不知道類是怎樣聲明的,但是可以使用這些類來派生出自己的類。利用虛函數(shù)和多態(tài)性,程序員的注意力集中在處理普遍性,而讓執(zhí)行環(huán)境處理特殊性。

多態(tài)性把操作的細(xì)節(jié)留給類的設(shè)計(jì)者(他們多為專業(yè)人員)去完成,而讓程序人員(類的使用者)只需要做一些宏觀性的工作,告訴系統(tǒng)做什么,而不必考慮怎么做,極大地簡化了應(yīng)用程序的編碼工作,大大減輕了程序員的負(fù)擔(dān),也降低了學(xué)習(xí)和使用C++編程的難度,使更多的人能更快地進(jìn)入C++程序設(shè)計(jì)的大門。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
伊人电影在线观看| 日本在线视频观看| 亚洲精华液一区二区三区| 夜夜未满十八勿进的爽爽影视| 无码国产精品96久久久久| 日韩另类在线| 92国产精品久久久久首页| 高清在线不卡av| 久久久久精彩视频| 国产美女精品在线| 水蜜桃av无码| 亚洲熟妇av一区二区三区| 97碰碰碰免费色视频| 91综合精品国产丝袜长腿久久| 一级一级黄色片| 中文在线免费看视频| 麻豆国产在线播放| 国产精品888| 成人精品视频一区| 成人a在线视频免费观看| 97视频国产在线| 在线观看视频你懂的| 毛片毛片毛片毛片毛片毛片| 动漫成人在线| 久久国产成人| 欧美日韩国产综合视频在线观看中文| 一区二区三区视频在线免费观看| 国产一区二区三区日韩欧美| 97超碰在线资源| 欧美高清激情视频| www.天天色| 狠狠躁夜夜躁人人爽视频| 成人动漫视频在线观看完整版| 高清性色生活片在线观看| 久久午夜老司机| 国产精品久久久久三级| 亚洲国产经典视频| 又骚又黄的视频| 全球中文成人在线| 妺妺窝人体色www在线小说| 台湾天天综合人成在线| 久久精品亚洲成在人线av网址| 欧美精品欧美精品系列c| 影音先锋在线视频| 在线精品视频一区二区| 欧美中文字幕一二三区视频| 欧美日韩国产区一| wwwwww色| 亚洲国产欧美国产综合一区| 正在播放一区| 福利精品一区| 麻豆精品久久| 国产亚洲精品久久久| www久久久久| 一色桃子av在线| 三级黄色在线观看| 97在线视频免费观看完整版| av无码精品一区二区三区宅噜噜| 欧美丰满熟妇xxxxx| 美女被羞羞网站| 日本va欧美va欧美va精品| 天堂中文字幕一二区| 精品欧美日韩| 极品美女扒开粉嫩小泬| 亚洲欧美日韩直播| 男人天堂av电影| 中文字幕亚洲成人| 欧美精品丝袜久久久中文字幕| 加勒比精品视频| 欧美一区二区高清| 完美搭档在线观看| 国产视频亚洲色图| 欧美激情论坛| 天天综合久久| 久久精品一区二区国产| xxx欧美尤物xxx| 久久高清免费视频| 国产亚洲一二三区| 欧美主播一区二区三区美女| 免费成人深夜夜行p站| 国产日韩在线一区| 国产免费无遮挡| 91视频论坛| 亚洲成人国产| 菠萝蜜视频在线观看www入口| 成人精品在线播放| 日韩欧美一区二区三区不卡视频| eeuss影院www在线观看| 新片速递亚洲合集欧美合集| 白嫩情侣偷拍呻吟刺激| 欧美性xxxxx极品| 日韩av自拍偷拍| 凹凸日日摸日日碰夜夜爽1| 丰满的亚洲女人毛茸茸| 91视频综合| 国产精品区二区三区日本| 91精品综合久久久久久| 欧美激情一区二区三区高清视频| 欧美在线激情视频| 丰满人妻一区二区三区无码av| 国产特黄在线| 91精品成人久久| 91大学生片黄在线观看| 国产精品www994| 大地资源网3页在线观看| 国产女人18水真多18精品一级做| 中文字幕亚洲精品一区| 亚洲国产精品18久久久久久| 精品在线观看视频| 你懂的视频在线播放| 交换做爰国语对白| 中文字幕精品一区| 91精品精品| 国产乱码一区二区三区| 91成人超碰| 欧洲一区二区在线观看| 欧美一区91| 欧美v亚洲v综合v国产v仙踪林| 日本激情综合网| 亚洲免费资源在线播放| 欧美v亚洲v综合v国产v仙踪林| 亚洲一区国产一区| 素人一区二区三区| 国产精品入口免费视| 午夜高潮免费视频| 亚洲www免费| 欧美另类极限扩张| 无码av中文一区二区三区桃花岛| 日本一区二区三区在线观看视频| 欧美美女bb生活片| 国产亚洲精品av| 黄色免费av| 国产欧美熟妇另类久久久| 香蕉视频禁止18| 久久青草伊人| 欧美在线精品一区| 欧洲中文字幕精品| 亚洲精品女av网站| 免费动漫网站在线观看| 日韩一区二区三区av| 亚洲产国偷v产偷v自拍涩爱| 国产美女搞久久| 亚洲精品乱码久久久久久按摩观| 99在线免费观看视频| 色天使在线观看| 亚洲人成绝费网站色ww| 久久婷婷国产综合尤物精品| 国产乱码精品一区二区三区卡| 午夜免费福利影院| 精品少妇无遮挡毛片| 1区2区3区精品视频| h网在线观看| 日韩av一二三四区| 中文字幕乱在线伦视频乱在线伦视频| 成人短视频在线观看免费| 91香蕉视频在线下载| www成人免费观看| 亚洲wwww| 依依成人在线视频| 免费萌白酱国产一区二区三区| 亚洲成avwww人| 中文字字幕在线中文| 精品国产拍在线观看| 在线成人国产| 亚洲国产另类久久久精品极度| 成人知道污网站| www.欧美.com| 少妇一区二区三区| 日韩不卡手机在线v区| 强迫凌虐淫辱の牝奴在线观看| 成人欧美一区二区三区黑人孕妇| 国产精品对白交换视频| 国产日韩另类视频一区| 国产精品成人免费| 黄色av免费在线观看| 亚洲中文字幕无码专区| 中文字幕一区二区av| 中文一区在线| 国产欧美视频在线| 欧美一区二区三区免费观看| 免费v片在线观看| 俺也去精品视频在线观看| 午夜精品免费| 国产aⅴ精品一区二区三区黄| 亚洲少妇中出一区| www国产亚洲精品久久网站| 久久久999精品视频| 精品卡1卡2卡三卡免费网站| а√最新版在线天堂| 97久久精品在线| 免费成人深夜夜行p站| 国产黄视频在线| av一本久道久久综合久久鬼色| 精品欧美一区二区久久久| 日韩av不卡在线| 一区二区三区日韩欧美精品| 狠狠88综合久久久久综合网| 99c视频在线| 1000部精品久久久久久久久| 亚洲石原莉奈一区二区在线观看| 97久久超碰国产精品电影| 国产精品99精品一区二区三区∴| 成人天堂噜噜噜| 韩国v欧美v日本v亚洲v| 欧美精品a∨在线观看不卡| 3d动漫一区二区三区| 久久久99精品免费观看| hd100%videos日本| 国产一区二区高清在线| 久久69精品久久久久久久电影好| 久久色成人在线| 国产精品无码久久久久| 欧美1区2区3区| 国产精品视频在线播放| 搞黄视频免费在线观看| 另类ts人妖一区二区三区| 好看的av在线不卡观看| 欧美高清精品一区二区| 国产三级电影在线播放| 国模极品一区二区三区| 欧美大片日本大片免费观看| 亚洲视频axxx| 久久中文字幕av| 色妞www精品视频| 四虎精品影院在线观看视频| 欧美性xxxxx极品娇小| 国产一区二区三区四区五区六区| 久久精品亚洲成在人线av网址| 国产一区精品福利| 亚洲国产成人av好男人在线观看| 国产美女福利视频| 国产精品a久久久久| 国产精品三区四区| 国产精品视频中文字幕91| 97在线视频精品| 日本电影在线观看网站| 福利精品一区| 一本大道东京热无码aⅴ| 亚洲GV成人无码久久精品| 亚洲综合av一区| 凹凸av导航大全精品| 巨大荫蒂视频欧美另类大| 免费无遮挡无码永久视频| www.久久99| 日韩激情图片| 天堂99x99es久久精品免费| 色琪琪综合男人的天堂aⅴ视频| 99视频在线精品国自产拍免费观看| 在线亚洲人成电影网站色www| 欧美成人午夜剧场免费观看| av网站在线观看免费| 国产精品乱码人人做人人爱| 久久久久亚洲AV成人网人人小说| 午夜少妇久久久久久久久| 一区二区三区四区视频免费观看| 精品无码一区二区三区爱欲| www.噜噜色.com| 国产麻豆视频精品| 日本中文字幕观看| 成年人在线观看av| av免费观看一区二区| 不卡福利视频| 国模视频一区二区三区| 日韩网站在线| 国产探花在线免费观看| 熟女熟妇伦久久影院毛片一区二区| 舐め犯し波多野结衣在线观看| 99国产精品久久久久老师| 久草在线综合| 一区二区成人在线| wwwww亚洲| 久久久久在线观看| 国产一级一区二区| 26uuu精品一区二区三区四区在线| 无码人妻一区二区三区免费n鬼沢| 丰满人妻一区二区三区四区| 韩国18福利视频免费观看| 人人妻人人做人人爽| 一区二区三区在线不卡| 一区二区视频在线观看免费的| 精品国产91乱码一区二区三区| 日夜操在线视频| 成人高清视频免费观看| 看电影就来5566av视频在线播放| 国产毛片精品国产一区二区三区| 日本不卡在线播放| 亚洲国产高清在线观看| 天天干天天操天天干天天操| 精品国产黄色片| 激情亚洲网站| 日韩在线免费高清视频| 欧美激情aⅴ一区二区三区| 日本一不卡视频| 91色在线看| 松下纱荣子在线观看| 欧美暴力喷水在线| 国产精品久久久久久久久久免费看| 女生裸体视频网站免费观看| 自拍偷拍激情视频| 丝袜+亚洲+另类+欧美+变态| 魔女鞋交玉足榨精调教| 国产熟人av一二三区| 午夜黄色福利视频| 亚洲欧美久久234| 成人国产精品一区二区| 国产伦精品一区二区三区免| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 一本大道香蕉久久| 国产欧美一级片| 国产精品成人国产| 成人爽a毛片免费啪啪动漫| 日韩av免费播放| 色88888久久久久久影院按摩| 顶臀精品视频www| 国产 日韩 欧美 在线| 国内久久精品| 日韩精品福利| 国产一区二区在线|播放| 国产精品视频区| 欧美二区三区91| 色噜噜久久综合| 国产精品久久久久av福利动漫| av黄色免费网站| 日韩经典中文字幕在线观看| 日韩av成人| 91蜜桃网站免费观看| 精品久久久av| 午夜精产品一区二区在线观看的|