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

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

開發 后端
在接下來地敘述中,我們將著重講述運算符重載時地一些更為細致地內容,其中就包括當重載地運算符返回值為引用和非引用兩種狀態時,代碼執行效率地高低以及采用在類內實現運算符重載函數

[[382304]]

前言

在上一則教程中,我們講述了重載運算符中前 ++和后++的重載函數的實現,闡述了在 C++中可以將運算符進行重載的方法,這種方法大大地便利了程序員編寫代碼,在接下來地敘述中,我們將著重講述運算符重載時地一些更為細致地內容,其中就包括當重載地運算符返回值為引用和非引用兩種狀態時,代碼執行效率地高低以及采用在類內實現運算符重載函數的方法。

返回值為引用和非引用的區別

在上述所示的類當中,增加一部分代碼,加入析構函數以及拷貝構造函數,代碼如下所示:

  1. class Point 
  2. private: 
  3.     int x; 
  4.     int y; 
  5.  
  6. public
  7.     Point()  
  8.     { 
  9.         cout<<"Point()"<<endl; 
  10.     } 
  11.     Point(int x, int y) : x(x), y(y)  
  12.     { 
  13.         cout<<"Point(int x, int y)"<<endl; 
  14.     } 
  15.  
  16.     Point(const Point& p) 
  17.     { 
  18.         cout<<"Point(const Point& p)"<<endl; 
  19.         x = p.x; 
  20.         y = p.y; 
  21.     } 
  22.     ~Point()  
  23.     { 
  24.         cout<<"~Point()"<<endl; 
  25.     } 
  26.  
  27.     friend Point operator++(Point &p); 
  28.     friend Point operator++(Point &p, int a); 
  29.  
  30.     void printInfo() 
  31.     { 
  32.         cout<<"("<<x<<", "<<y<<")"<<endl; 
  33.     } 
  34. }; 

在上述的代碼中,我們在構造函數以及拷貝構造函數析構函數都加入了打印信息,其中,運算符重載函數前++和后++函數沿用之前的一樣,返回值不是引用,與此同時,我們在前 ++和后 ++函數中也加入打印信息的代碼,代碼如下所示:

  1. /* ++p */ 
  2. Point operator++(Point &p) 
  3.     cout << "++p" << endl; 
  4.     p.x += 1; 
  5.     p.y += 1; 
  6.     return p; 
  7.  
  8. /* p++ */ 
  9. Point operator++(Point &p, int a) 
  10.     cout << "p++" << endl; 
  11.     Point n; 
  12.     n = p; 
  13.     p.x += 1; 
  14.     p.y += 1; 
  15.     return n; 

上述便是前 ++和 后 ++的重載函數,緊接著,書寫主函數的代碼,觀察當返回值為非引用的時候,代碼的運行效果,主函數代碼如下所示:

  1. int main(int argc, char **argv) 
  2.     Point p1(1, 2); 
  3.  
  4.     cout<<"begin"<<endl; 
  5.     ++p1; 
  6.     cout << "******************"<<endl; 
  7.  
  8.     p1++; 
  9.     cout<<"end"<<endl; 
  10.  
  11.     return 0; 

上述代碼的運行結果如下所示:

lhp7d3H1crAE9u2

依據運行結果我們分析一下,第一條輸出信息 Point(int x, int y)是因為執行了 Point p1(1,2);語句而調用的構造函數,++p這條輸出信息同樣也是因為執行了 ++p;而調用的構造函數,那緊接著的兩條輸出信息是如何產生的呢,我們回過頭去看看++p的函數,可以看到 ++p的函數是一個返回值為 Point類型的函數,而上述中的輸出語句 Point(const Point& p)和 ~Point()就是在創建這個返回值對象時調用的構造函數以及當返回值返回后調用的析構函數;而緊接著的輸出信息是 p++和 Point()以及~Point(),p++這個輸出信息自然是因為調用的后 ++重載運算符函數的構造函數而輸出的打印信息,那緊接著的 Point()和 ~Point()是因為在后 ++重載運算符函數中,創建的局部變量 Point n,進而調用了 Point()函數,以及函數退出之后,局部變量銷毀,調用了析構函數。

上述詳細地分析了各個打印信息輸出的原因,通過上述的打印信息我們可以清楚知道程序在什么地方調用了構造函數,在什么地方調用了析構函數,再次回顧上述的函數調用過程,可以看出來其實調用的Point(const Point& p)和~Point()是多余的,那要如何改進代碼呢,我們只需要將前 ++運算符重載函數的返回值類型改為引用就行,這樣就不會創建臨時的變量,同時也就不會在調用構造函數和析構函數,改動之后的代碼如下所示:

  1. Point& operator++(Point &p) 
  2.     cout<<"++p"<<endl; 
  3.     p.x += 1; 
  4.     p.y += 1; 
  5.     return p; 

那么上述代碼的運行結果是什么呢?在主函數不變的情況下,輸出結果如下所示:

M4QzImA1uYxnBK9

可以看到上述結果中,之前在 ++p后輸出的兩條信息現在因為將返回值設置為引用之后就消失了,說明這樣的方法避免了調用構造函數和析構函數,節省了程序運行的空間,那如果將后++重載函數設置為引用可不可行呢,很顯然,如果返回的是 n的引用,那么這在語法中就是錯誤的,因為n是局部變量,局部變量在函數調用結束就銷毀了,是不能作為引用對象的。如果返回的是 p呢,那么函數的運行結果將發生改變,換句話說就是不是實現的后 ++這個功能了。

最后,總結一下,對于一個函數來說,函數的返回結果如果作為值返回,那么代碼的執行效率較低;如果作為引用返回,那么代碼的執行效率較高,但是會存在一個問題,引用返回可能會導致函數運行出錯,所以,在保證函數運行沒有錯誤的前提下,為了提高效率應該使用的是引用返回。

緊接著,我們知道我們在使用 C++進行編碼的時候,基本不會再采用 C語言中的語法 printf這個語句,隨之替代的是 cout這個語句,我們也知道我們使用 cout進行輸出的時候,往往采用的是下面這樣的輸出方式:

  1. cout << "m=" << m << endl; /* 此時 m 不是一個實例化對象 */ 

但是如果說此時 m 是一個實例化的對象,那么像上述這樣輸出就是存在問題的,這個時候,就需要對 <<運算符進行重載,重載的代碼如下所示:

  1. ostream& operator<<(ostream &o, Point p) 
  2.     cout<<"("<<p.x<<", "<<p.y<<")"
  3.     return o; 

稍微對上述代碼進行一下解釋, 這里為什么返回值是ostream&呢,是因為對于 cout來說,它是ostream類的實例化對象,在使用 cout進行輸出的時候,它所遵循的一個輸出格式是 cout <<,因此,這里的返回值是 ostream。為什么返回值是引用呢,是為了滿足下面所示代碼的運行,同時輸出了 m和 p1,結合上述代碼,我們來編寫主函數,主函數代碼如下所示:

  1. int main(int argc, char **argv) 
  2.     Point p1(1,2); 
  3.     Point m; 
  4.     m = p1++; 
  5.     cout << "m =" << m << "p1 =" << p1 << endl;  

上述代碼的運行結果如下所示:

1cGujg7yqZSIfpK

可以看到在重載了運算符 <<之后,輸出實例化的對象也是可行的。

類內實現運算符重載函數

在上述代碼中我們實現的 +運算符重載函數以及前 ++運算符重載函數和后++運算符重載函數,都是在類外實現的,那么如果要在類內實現以上幾個運算符重載函數,應該如何寫呢,我們先回顧一下,在類外面實現的+運算符重載函數的函數聲明如下所示:

  1. friend Point operator+(Point &p1, Point &p2); /* 因為在類外要能夠訪問類里面的數據成員,因此這里使用的是友元 */ 

上述是在類外實現運算符重載函數時的函數原型,那么如果函數的定義就是在類里面實現的,函數又該如何編寫呢?首先,如果是在類里面實現,那么當前使用這個類進行實例化的對象本身就可以使用 *this來表征一個對象,這個時候,如果要重載 +運算符函數,那么就只需要一個Point類的形參就行,代碼如下所示:

  1. class Point 
  2. private: 
  3.     int x; 
  4.     int y; 
  5. public
  6.     /* 省略相關構造函數的代碼,可以結合前文補全 */ 
  7.     Point operator+(Point &p) 
  8.     { 
  9.         cout<<"operator+"<<endl; 
  10.         Point n; 
  11.         n.x = this->x + p.x; 
  12.         n.y = this->y + p.y; 
  13.         return n; 
  14.     } 

對比上述在類外面實現的代碼,對于重載的運算符 +來說,只有一個形參了,而與其相加的另一個對象使用的是this來替代。依據這樣的一種思路,我們繼續將前 ++和后 ++重載的運算符函數進行改寫,改寫之后的代碼如下所示:

  1. class Point 
  2. private: 
  3.     int x; 
  4.     int y; 
  5. public
  6.     /* Point p(1,2); ++p */ 
  7.     Point& operator++(void) 
  8.     { 
  9.         cout<<"operator++(void)"<<endl; 
  10.         this->x += 1; 
  11.         this->y += 1; 
  12.         return *this; 
  13.     } 
  14.  
  15.     /* Point p(1,2); p++; */ 
  16.     Point operator++(int a) 
  17.     { 
  18.         cout<<"operator++(int a)"<<endl; 
  19.         Point n; 
  20.         n = *this; 
  21.         this->x += 1; 
  22.         this->y += 1; 
  23.         return n;    
  24.     } 
  25. }; 

結合上述的代碼,我們再來編寫主函數,主函數的代碼如下所示:

  1. int main(int argc, char ** argv) 
  2.     Point p1(1,2); 
  3.     Point p2(2,3); 
  4.  
  5.     Point m; 
  6.     Point n; 
  7.  
  8.     cout << "begin" << endl; 
  9.     m = ++p1;    /* m = p1.operator++(); */ 
  10.     cout << "m =" << m << "p1 =" << p1 << endl; 
  11.     cout << "*********************" << endl; 
  12.  
  13.     n = p2++;    /* n = p2.operator++(0); */ 
  14.     cout << "n =" << n << "p2 =" << p2 << endl; 
  15.  
  16.     return 0; 

上述代碼中,注釋掉的代碼和沒注釋的代碼前后是等價的,只是說注釋掉的代碼看起來更加直觀,更加容易理解其背后的原理,而注釋前的代碼則更加簡潔。這里額外說一點,<<的重載函數是不能夠放到類內實現的,因為這個重載函數的形參不是 Point類的,所以其只能在類外才能實現。

上述中,敘述了在類內實現的重載運算符函數,接下來敘述一下 =運算符在類內實現的重載函數,我們以之前所說的 Person類來實現這個功能,Person類的代碼實現如下所示:

  1. class Person 
  2. private: 
  3.     char *name
  4.     int age; 
  5.     char *work
  6.  
  7. public
  8.     Person() 
  9.     { 
  10.         name = NULL
  11.         work = NULL
  12.     } 
  13.  
  14.    Person(char *nameint age, char *work
  15.    { 
  16.        this->age = age; 
  17.  
  18.        this->name = new char[strlen(name) + 1]; 
  19.        strcpy(this->name,name); 
  20.  
  21.        this->work = new char[strlen(work) + 1]; 
  22.        strcpy(this->workwork); 
  23.    } 
  24.  
  25.    /* 拷貝構造函數 */  
  26.    Person(Person &p) 
  27.    { 
  28.        this->age = p.age; 
  29.  
  30.        this->name = new char[strlen(p.name) + 1]; 
  31.        strcpy(this->name,p.name); 
  32.  
  33.        this->work = new char[strlen(p.work) + 1]; 
  34.        strcpy(this->work, p.work); 
  35.    } 
  36.  
  37.    ~Person() 
  38.    { 
  39.        if (this->name
  40.            delete this->name
  41.        if (this->work
  42.            delete this->work
  43.    } 
  44.  
  45.    void PrintInfo(void)  
  46.    { 
  47.        cout << "name =" << name << "age =" << age << "work =" << work << endl; 
  48.    } 

基于上述的代碼,我們可以書寫如下的主函數代碼:

  1. int main(int argc, char **argv) 
  2.     Person p1("zhangsan", 18, "doctor"); 
  3.     Person p2; 
  4.     p2 = p1; 

上述中,我們還沒有將 =運算符進行重載,就使用了 =實現了實例化對象的運算,這樣會存在一個什么問題呢,我們從源頭來進行分析,=運算符執行的是值拷貝,那么在執行了上述語句之后,p2和p1之間的關系是這樣的:

ywhv3zYKCaRjrXx

通過上述所示的圖片可以看出,如果不將 =進行重載,那么會讓 p1和 p2的name 和 work指向同一塊內存,這會造成什么問題呢,如果此時已經將 p1的內存釋放掉了,而這個時候又要釋放 p2的內存,這種情形就會出錯,同一塊內存不能夠釋放兩次。

因此,就需要對 =運算符進行重載,重載的代碼如下所示:

  1. /* 注意此處的代碼是在類里面實現的成員函數,這里省略的一部分代碼 */ 
  2. Person& operator=(Person &p) 
  3.     if (this == &p) 
  4.         return *this; 
  5.     this->age = p.age; 
  6.  
  7.     if (this->name
  8.         delete this->name
  9.     if (this->work
  10.         delete this->work
  11.  
  12.     this->name = new char[strlen(p.name) + 1]; 
  13.     strcpy(this->name, p.name); 
  14.  
  15.     this->work = new char[strlen(p.work) + 1]; 
  16.     strcpy(this->work, p.work); 

這樣子就會避免上述情況的出現,我們現在繼續來書寫主函數:

  1. int main(int argc, char **argv) 
  2.     Person p1("zhangsan", 18, "doctor"); 
  3.  
  4.     cout<<"Person p2 = p1" <<endl; 
  5.     Person p2 = p1; 
  6.  
  7.     Person p3; 
  8.  
  9.     cout<<"p3=p1"<<endl; 
  10.     p3 = p1; 
  11.     cout<<"end"<<endl; 
  12.     p1.PrintInfo(); 
  13.     p2.PrintInfo(); 
  14.     p3.PrintInfo(); 
  15.  
  16.     return 0; 

上述主函數運行的結果如下所示:

2kiKb8NEfYynTdo

通過上述代碼我們看到,實際上代碼 Person p2 = p1的運行并不是調用的 = 的重載函數,而是調用的拷貝構造函數,只有 p3= p1才是調用的 =的重載函數。

在本章節的最后,額外補充一點,剛剛提到了拷貝構造函數,實際上拷貝構造函數的形參大多數都是加了const修飾符的,也就是像如下所示的這樣子:

  1. Person& operator=(const Person &p) 

而這個時候,如果我們定義的 Person p1也是 const的,也就是像這樣:

  1. const Person p1("zhangsan", 18, "doctor"); 

那這個時候在使用 p1.PrintInfo()的時候就會出錯,因為此時必須把該成員函數也表明為 const的才行,代碼如下所示:

  1. /* 類內成員函數,省略部分代碼 */ 
  2. void PrintInfo(void) const 
  3.     cout << "name =" << name << "age =" << age << "work =" << work << endl; 

總結一下也就是說:const對象只能夠調用const成員函數,而const表示的是此函數沒有對當前對象進行修改

小結

上述就是本期教程分享的內容,到本期教程截至,C++相對于 C語言不同的一些語法特性就到此結束了。下期教程將介紹 C++如何實現面向對象的方法。本期教程所涉及到的代碼可以通過百度云鏈接的方式獲取到。

鏈接:https://pan.baidu.com/s/1BC55_QH-iV23-ON0v1OGSA

提取碼:iyf7

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

 

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

2021-02-21 12:09:32

C 語言基礎語法

2021-02-16 10:57:34

C++ C 語言windows

2021-02-11 08:25:17

C 語言C++ 基礎

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++多態

2011-07-14 22:52:27

C++typedef

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++編程語言

2010-01-22 15:30:36

C++語言

2022-07-01 11:56:54

C語言C++編程語言

2024-02-21 14:55:19

C++語言編程
點贊
收藏

51CTO技術棧公眾號

欧美激情一级精品国产| 日韩一区二区电影在线| 亚洲一区3d动漫同人无遮挡| 国产免费福利视频| 国产农村妇女精品一区二区| 在线精品播放av| 美女被爆操网站| 3d欧美精品动漫xxxx无尽| 亚洲丝袜美腿综合| 精品无码久久久久国产| 亚洲综合精品视频| 一区二区黄色| 久久久久999| 最近中文字幕免费视频| 98视频精品全部国产| 欧美日精品一区视频| 欧美 丝袜 自拍 制服 另类| а√天堂资源地址在线下载| 国产天堂亚洲国产碰碰| 国产在线一区二区三区欧美| 亚洲一级黄色大片| 欧美亚洲专区| 国内精品模特av私拍在线观看| 欧美亚洲色综久久精品国产| 欧美日韩导航| 欧美成人性战久久| 手机免费av片| 国产精品高潮久久| 色综合久久99| 91免费视频网站在线观看| 成人日日夜夜| 中文字幕亚洲精品在线观看| 日韩福利二区| 嫩草在线播放| 91丨九色丨尤物| 国产区欧美区日韩区| 99久久夜色精品国产亚洲| 久久国产生活片100| 国产成人涩涩涩视频在线观看 | 亚洲国产精品久久人人爱| 一区二区免费在线视频| 91啦中文在线| 欧美激情在线免费观看| 日本免费高清一区二区| 蜜桃成人在线视频| 久久久久久麻豆| 麻豆亚洲一区| 免费在线国产| 久久久久国产精品免费免费搜索| 精品亚洲第一| 无码国精品一区二区免费蜜桃 | 中文字幕人妻一区二区三区在线视频 | 偷拍日韩校园综合在线| 福利视频一区二区三区四区| 手机av免费在线| 亚洲午夜久久久久久久久电影院| 欧美另类videosbestsex日本| 污片视频在线免费观看| 夜夜爽夜夜爽精品视频| 精品人妻少妇一区二区| 日韩电影免费看| 在线一区二区三区四区五区| 无码日韩人妻精品久久蜜桃| www.26天天久久天堂| 欧美男人的天堂一二区| 手机在线视频一区| 综合激情网...| 日韩av一区在线| 97人妻精品一区二区免费| 成人a'v在线播放| 日韩中文字幕网址| 久草成人在线视频| 99精品免费视频| 国产精品福利在线观看| 一级做a爱片性色毛片| 国产真实乱偷精品视频免| 99re视频在线播放| 四虎影视在线观看2413| 中文字幕乱码一区二区免费| 老司机av福利| 2021中文字幕在线| 日本二三区不卡| av在线网站免费观看| 国产精品久久久久久久久久白浆 | 黄色在线免费| 图片区小说区国产精品视频| www.com黄色片| xvideos.蜜桃一区二区| 亚洲视频国产视频| 91在线播放观看| 亚洲欧美日韩精品一区二区| 成人国产精品久久久久久亚洲| 国产91绿帽单男绿奴| 国产日韩av一区二区| 91麻豆天美传媒在线| 免费成人在线电影| 欧美精品aⅴ在线视频| 国产精品久久久久久久无码| 日本一区二区免费高清| 欧美激情综合色| 性色av一区二区三区四区| 国产成人在线观看免费网站| 日本一区二区免费看| 肉体视频在线| 欧美日韩久久不卡| 精品人妻少妇嫩草av无码| 亚洲电影在线一区二区三区| 国产91色在线| 特黄aaaaaaaaa真人毛片| 国产精品美女久久久久高潮 | 免费观看在线综合色| 国产一区二区无遮挡| 国产精品扒开做爽爽爽的视频| 黄网动漫久久久| 中文字幕无码毛片免费看| 日韩av有码| 国产999精品视频| 人妻va精品va欧美va| 最近日韩中文字幕| 在线视频日韩一区| 在线看成人短视频| 午夜精品美女自拍福到在线| 国产乱人乱偷精品视频| 国产亚洲欧美色| 欧美二区在线视频| 免费看久久久| 欧美激情日韩图片| 一级做a爱片性色毛片| 国产喂奶挤奶一区二区三区| 黄色网页免费在线观看| 岛国精品一区| 欧美激情在线有限公司| 午夜精品无码一区二区三区| 国产精品乱人伦| 日韩av片网站| 秋霞欧美视频| 国产精品美女主播| 国产黄色片在线观看| 色婷婷亚洲一区二区三区| 亚洲国产欧美视频| 国产欧美午夜| 欧美日韩国产综合视频在线| 91黄页在线观看| 亚洲精品第一国产综合精品| 天天操天天摸天天干| 99re这里只有精品首页| 国内外成人免费激情视频| 亚洲人成网站77777在线观看| 97精品国产97久久久久久| 黄色福利在线观看| 婷婷开心激情综合| 国产吞精囗交久久久| 午夜一区二区三区不卡视频| 久久久久综合一区二区三区| 国产精品迅雷| 在线看国产精品| 国产精品久久久久久免费| 亚洲欧洲精品一区二区三区 | 国产v片免费观看| 六月丁香久久丫| 4388成人网| 97电影在线| 这里只有精品视频在线观看| 欧美性猛交xxxxx少妇| 高清在线不卡av| 欧美亚洲一二三区| 欧洲杯什么时候开赛| 91精品国产综合久久香蕉最新版 | 亚洲 小说区 图片区 都市| 欧美视频在线看| av片在线免费看| 国产精品亚洲一区二区三区在线| 欧美日韩不卡在线视频| 免费看成人吃奶视频在线| 国产日本欧美一区二区三区在线 | 玉米视频成人免费看| 国模私拍在线观看| 免费一级片91| 欧美高清中文字幕| 国产精品美女久久久久久不卡| 成人www视频在线观看| 国产调教在线| 最近更新的2019中文字幕| 亚洲春色一区二区三区| 色婷婷亚洲婷婷| 日本少妇高清视频| 久久婷婷综合激情| 久久久久xxxx| 国产欧美91| 中文字幕av导航| 特黄特色欧美大片| 成人性生交xxxxx网站| 午夜伦理福利在线| 久久国产精品影视| 懂色一区二区三区| 欧美精品一区二区在线播放| 中文字幕永久免费视频| 亚洲成国产人片在线观看| 国产又粗又硬视频| 91丨九色丨尤物| 国产精品二区视频| 免费观看日韩av| 国产h视频在线播放| 99久久99视频只有精品| 久久一区二区精品| 午夜电影一区| 成人av电影天堂| 亚洲欧美在线成人| 国产69精品久久久久久| 在线观看电影av| 最新中文字幕亚洲| 蜜桃视频在线观看视频| 亚洲精品久久久久久久久久久| 一区二区三区亚洲视频| 欧美特级www| 国产大片中文字幕在线观看| 自拍偷拍国产精品| 日本欧美一区二区三区不卡视频| 不卡的av电影在线观看| 最好看的中文字幕| 国产在线播放一区| 国产传媒免费观看| 蜜桃视频在线观看一区二区| 日韩欧美xxxx| 欧美亚洲免费| 国产男女无遮挡| 日韩亚洲国产欧美| 欧美一级片免费播放| 欧美福利电影在线观看| 麻豆中文字幕在线观看| 99久久夜色精品国产亚洲狼| 日韩亚洲一区在线播放| 久久99精品久久久久久园产越南| 狠狠色综合色区| 激情视频极品美女日韩| 91精品入口蜜桃| 欧美日本三级| 99国内精品久久久久久久软件| 成人在线精品| 91免费欧美精品| 欧美在线在线| 国产精品theporn88| 亚洲福利合集| 国产精品久久7| 久久免费视频66| 九九99久久| 蜜桃视频欧美| 五月婷婷综合色| 日韩一级毛片| 黑人巨大国产9丨视频| 在线观看免费一区二区| 国产欧美久久久久| 亚洲高清毛片| 久久精品99国产| 日韩精品色哟哟| 中文字幕 91| 国产乱国产乱300精品| 少妇高潮一69aⅹ| 不卡av免费在线观看| 免费中文字幕av| 中文幕一区二区三区久久蜜桃| 国精产品一区一区| 伊人开心综合网| 99精品视频99| 在线视频你懂得一区二区三区| 正在播放亚洲精品| 91精品国产aⅴ一区二区| 亚洲精品国产av| 亚洲精品在线视频| 久久久久久久久免费视频| 九色成人免费视频| 中文字幕高清在线播放| 国产精品久久久久不卡| 久久精品九色| 久久久久久国产精品免费免费| 久久99久久人婷婷精品综合| 一级一片免费播放| 亚洲无吗在线| 中文字幕国内自拍| 国产69精品久久99不卡| 无码人妻精品一区二区中文| 国产精品国产馆在线真实露脸 | 岛国视频一区免费观看| 日韩精品欧美大片| 亚洲三区视频| 国产日韩欧美高清免费| 中文字幕 日韩 欧美| 北条麻妃一区二区三区| 黄色国产在线播放| 亚洲aaa精品| 夜夜狠狠擅视频| 亚洲国产精品小视频| 免费在线你懂的| 51久久精品夜色国产麻豆| 国产美女亚洲精品7777| 美日韩免费视频| 综合一区在线| 国内自拍视频一区| 成人福利电影精品一区二区在线观看| 国产熟女一区二区| 午夜视黄欧洲亚洲| 国产三级在线观看视频| 国产午夜精品视频| xxxx视频在线| 91情侣偷在线精品国产| 国产成人影院| 国产成人精品视频免费看| 国产精品888| 阿v天堂2014| 黑人巨大精品欧美一区二区| 99精品视频在线播放免费| 亚洲日韩中文字幕在线播放| 国产黄大片在线观看| 97视频资源在线观看| 欧美超碰在线| 在线视频日韩一区 | 亚洲成人精品av| 中文字幕免费高清电视剧网站在线观看 | 国产一区二区看久久| 日本欧美一区二区三区不卡视频| 精品久久久久久久久久久久| 亚洲av无码一区二区乱子伦| 精品国产一区二区三区久久狼5月| 91av亚洲| 欧美成人综合一区| 一本一本久久| 天堂www中文在线资源| 一区二区三区高清不卡| 国产精品自产拍| 久久久精品视频在线观看| 日本成人一区二区| 亚洲国产婷婷香蕉久久久久久99| 久久狠狠婷婷| 极品白嫩丰满美女无套| 精品国产鲁一鲁一区二区张丽| 亚洲va天堂va欧美ⅴa在线| 欧美日韩成人精品| 亚洲精品影片| 久久久久99精品成人片| 成人永久免费视频| 国产网友自拍视频| 亚洲福利在线观看| 国产网站在线| 欧美系列一区| 日韩成人一区二区| 正在播放国产对白害羞| 欧美日韩精品福利| av官网在线播放| 国产精品亚洲综合| 香蕉久久夜色精品| 欧美福利第一页| 91精品国产一区二区三区香蕉| dj大片免费在线观看| av在线不卡一区| 亚洲少妇一区| 快灬快灬一下爽蜜桃在线观看| 欧美日韩色一区| av在线播放国产| 国产伦视频一区二区三区| 亚洲视频www| 国产精品成人在线视频| 91精品国产入口| 丁香花在线电影小说观看| 美女精品国产| 日本色综合中文字幕| 蜜臀久久精品久久久用户群体| 日韩欧美在线1卡| 女海盗2成人h版中文字幕| 色综合视频二区偷拍在线| 国模一区二区三区白浆| 国产在线视频你懂的| 亚洲男人的天堂在线播放| 国产国产一区| 99色这里只有精品| 中文字幕精品综合| 亚洲国产剧情在线观看| 欧美一级片在线播放| 国产精品久久占久久| 国产一级免费片| 欧美亚洲国产一区二区三区va | 91精品国产视频| 看全色黄大色黄女片18| 欧美主播一区二区三区| 在线看女人毛片| 日韩一本精品| 成人av在线播放网址| 久久久999久久久| 欧美激情精品久久久久久| 妖精视频一区二区三区免费观看| 超碰成人在线播放| 精品免费在线观看| 秋霞影院午夜丰满少妇在线视频| 国产伦精品一区二区三区照片| 蜜桃久久久久久久| 男人的天堂一区| 美女视频久久黄| 成人三级视频| japanese在线观看| 91精品午夜视频| 欧美日韩尤物久久|