青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

寶杉的博客

UNIX/LINUX;ACE;SNMP;C++
posts - 33, comments - 23, trackbacks - 0, articles - 0

缺省值

提高程序易用性,避免每次調(diào)用函數(shù)參數(shù)都相同的情況。

缺省值只能出現(xiàn)在函數(shù)聲明中,不能在函數(shù)定義中。

兩個(gè)原因:

一是函數(shù)的實(shí)現(xiàn)(定義)本來(lái)就與參數(shù)是否有缺省值無(wú)關(guān),所以沒有必要讓缺省值出現(xiàn)在函數(shù)的定義體中。

二是參數(shù)的缺省值可能會(huì)改動(dòng),顯然修改函數(shù)的聲明比修改函數(shù)的定義要方便。

規(guī)則:參數(shù)從后向前缺省

正確的示例如下:

void Foo(int x, int y=0, int z=0);

錯(cuò)誤的示例如下:

void Foo(int x=0, int y, int z=0);  

但要避免二義性

C++exams\default_para

 

運(yùn)算符重載及其規(guī)則

運(yùn)算符即可定義為成員函數(shù),也可定義為全局函數(shù)。

規(guī)則如下:

運(yùn)算符

規(guī)則

所有的一元運(yùn)算符

建議重載為成員函數(shù)

= () [] ->

只能重載為成員函數(shù)

+= -= /= *= &= |= ~= %= >>= <<=

建議重載為成員函數(shù)

所有其它運(yùn)算符

建議重載為全局函數(shù)

 

不能重載的運(yùn)算符

1)不能改變C++內(nèi)部數(shù)據(jù)類型(如int,float等)的運(yùn)算符。

2)不能重載‘.’,因?yàn)?span lang=EN-US>‘.’在類中對(duì)任何成員都有意義,已經(jīng)成為標(biāo)準(zhǔn)用法。

3)不能重載目前C++運(yùn)算符集合中沒有的符號(hào),如#,@,$等。原因有兩點(diǎn),一是難以理解,二是難以確定優(yōu)先級(jí)。

4)對(duì)已經(jīng)存在的運(yùn)算符進(jìn)行重載時(shí),不能改變優(yōu)先級(jí)規(guī)則,否則將引起混亂。

 

函數(shù)內(nèi)聯(lián)

目的:提高執(zhí)行效率。

Q為什么要用?

A提高執(zhí)行效率。

Q如何提高?

A宏代碼本身不是函數(shù),但使用起來(lái)象函數(shù)。預(yù)處理器用復(fù)制宏代碼的方式代替函數(shù)調(diào)用,省去了參數(shù)壓棧、生成匯編語(yǔ)言的CALL調(diào)用、返回參數(shù)、執(zhí)行return等過程,從而提高了速度。

Q缺點(diǎn)?

使用宏代碼最大的缺點(diǎn)是容易出錯(cuò),預(yù)處理器在復(fù)制宏代碼時(shí)常常產(chǎn)生意想不到的邊際效應(yīng)。

 

 

例如:

#define MAX(a, b)       (a) > (b) ? (a) : (b)

語(yǔ)句

result = MAX(i, j) + 2 ;

將被預(yù)處理器解釋為

result = (i) > (j) ? (i) : (j) + 2 ;

由于運(yùn)算符‘+’比運(yùn)算符‘:’的優(yōu)先級(jí)高,所以上述語(yǔ)句并不等價(jià)于期望的

result = ( (i) > (j) ? (i) : (j) ) + 2 ;

如果把宏代碼改寫為

#define MAX(a, b)       ( (a) > (b) ? (a) : (b) )

則可以解決由優(yōu)先級(jí)引起的錯(cuò)誤。但是即使使用修改后的宏代碼也不是萬(wàn)無(wú)一失的,例如語(yǔ)句result = MAX(i++, j);

將被預(yù)處理器解釋為

result = (i++) > (j) ? (i++) : (j);

對(duì)于C++ 而言,使用宏代碼還有另一種缺點(diǎn):無(wú)法操作類的私有數(shù)據(jù)成員

posted @ 2007-08-13 10:21 寶杉 閱讀(234) | 評(píng)論 (0)編輯 收藏

隱藏規(guī)則:

“隱藏”是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù),規(guī)則如下:

1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時(shí),不論有無(wú)virtual關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。

2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual關(guān)鍵字。此時(shí),基類的函數(shù)被隱藏(注意別與覆蓋混淆)。

 

回顧

靜態(tài)多態(tài)性:函數(shù)重載;運(yùn)算符重載;

動(dòng)態(tài)多態(tài)性:繼承;虛函數(shù);

 

上述例子之所以使用指針目的是:表達(dá)一種動(dòng)態(tài)性質(zhì),即當(dāng)指針指向不同對(duì)象可以調(diào)用不同方法。但事實(shí)上不能達(dá)到這樣的效果。雖然可以強(qiáng)制指針的類型轉(zhuǎn)換((derived *p->g();),或者直接調(diào)用指向派生類的指針,但是只要將成員函數(shù)聲明為virtual就能起到這樣的作用。

隱藏

不同指針指向同一地址,那么指針的類型決定調(diào)用方法,還是指針指向的對(duì)象?

例子:C++exams\hide

可以看出,virtual函數(shù)可以實(shí)現(xiàn)不同類型的指針指向不同對(duì)象,調(diào)用不同的方法。

就是說,當(dāng)父類對(duì)象和子類對(duì)象同時(shí)存在,且調(diào)用父子對(duì)象的同名方法時(shí),只能用虛擬函數(shù)實(shí)現(xiàn)。

 

另外,提供一種思路:

如果基類與派生類的同名函數(shù)參數(shù)不同,比如:

class Base

{

public:

void f(int x);

};

class Derived : public Base

{

public:

void f(char *str);

};

void Test(void)

{

Derived *pd = new Derived;

pd->f(10);  // error

}

基類為int,派生類為string.如果想在派生類中調(diào)用基類的方法,即在派生類中添加基類方法的調(diào)用。

class Derived : public Base

{

public:

void f(char *str);

void f(int x) { Base::f(x); }

};

但此做法容易混亂,不宜使用。最好的方法還是用virtual

 

指針類型

對(duì)象類型

面向?qū)ο髣?dòng)態(tài)的設(shè)計(jì),應(yīng)該是對(duì)象類型起到關(guān)鍵作用,而不是指針類型。

posted @ 2007-08-13 10:16 寶杉 閱讀(149) | 評(píng)論 (0)編輯 收藏

重載與覆蓋

成員函數(shù)被重載的特征:

1)相同的范圍(在同一個(gè)類中);

2)函數(shù)名字相同;

3)參數(shù)不同;

4virtual關(guān)鍵字可有可無(wú)。

覆蓋是指派生類函數(shù)覆蓋基類函數(shù),特征是:

1)不同的范圍(分別位于派生類與基類);

2)函數(shù)名字相同;

3)參數(shù)相同;

4)基類函數(shù)必須有virtual關(guān)鍵字。

例子:C++exams\cover

指向基類的指針可以指向其共有派生類的對(duì)象,但反之不行,另外私有派生類也不行。

比如:車 是基類,小汽車,馬車 等是派生類。

一個(gè)車類的指針可以指向任何派生類,因?yàn)樗鼈兌紝儆谲嚒?/span>

而反之,不能說指向馬車的指針可以指向車,因?yàn)檐嚨母拍钭畲蟆?/span>

posted @ 2007-08-13 10:15 寶杉 閱讀(175) | 評(píng)論 (0)編輯 收藏

重載(overloaded)、內(nèi)聯(lián)(inline)、constvirtual

 

 

重載

內(nèi)聯(lián)

const

virtual

全局函數(shù)

 

 

類的成員函數(shù)

內(nèi)部標(biāo)識(shí)符

編譯器根據(jù)參數(shù)為每個(gè)重載函數(shù)創(chuàng)建內(nèi)部標(biāo)識(shí)符,以便區(qū)分忽略返回值與有返回值的重載函數(shù)。

連接交換指定符號(hào)

C編譯過的函數(shù),經(jīng)過編譯器標(biāo)識(shí)后與C++的表示風(fēng)格不同。所以C++不能直接調(diào)用C編譯出的函數(shù)。C++提供extern “C”

例如:

extern “C”

{

   void foo(int x, int y);

   … // 其它函數(shù)

}

或者寫成

extern “C”

{

   #include “myheader.h”

   … // 其它C頭文件

}

 

全局函數(shù)與成員函數(shù)同名

全局函數(shù)與成員函數(shù)同名不算重載,因?yàn)楹瘮?shù)作用域不同。

為了區(qū)別,調(diào)用全局函數(shù)時(shí),注意格式:

::函數(shù)名(參數(shù));

 

隱式類型轉(zhuǎn)換導(dǎo)致重載函數(shù)產(chǎn)生二義性

隱式類型轉(zhuǎn)換:數(shù)字本身沒有類型,把數(shù)字當(dāng)作參數(shù),自動(dòng)進(jìn)行類型轉(zhuǎn)換。

例如:

void output( int x);   // 函數(shù)聲明

void output( float x); // 函數(shù)聲明

output(0.5)將產(chǎn)生編譯錯(cuò)誤,因?yàn)榫幾g器不知道該將0.5轉(zhuǎn)換成int還是float類型的參數(shù)。

正確寫法:

     output(int(0.5));  // output int 0

     output(float(0.5));    // output float 0.5

 

posted @ 2007-08-13 10:14 寶杉 閱讀(356) | 評(píng)論 (0)編輯 收藏

freedelete

只是把指針?biāo)傅膬?nèi)存給釋放掉,但并沒有把指針本身干掉。

 

注意:

1)指針消亡了,并不表示它所指的內(nèi)存會(huì)被自動(dòng)釋放。

2)內(nèi)存被釋放了,并不表示指針會(huì)消亡或者成了NULL指針。

比較

mallocfree:無(wú)法滿足動(dòng)態(tài)對(duì)象的要求。對(duì)象在創(chuàng)建同時(shí)進(jìn)行構(gòu)造,消亡同時(shí)析構(gòu)。

malloc free是庫(kù)函數(shù),不是運(yùn)算符,不受編譯器控制。

newdelete:不是庫(kù)函數(shù),能動(dòng)態(tài)內(nèi)存分配和清理內(nèi)存。

 

內(nèi)存耗盡

內(nèi)存耗盡時(shí)newmalloc返回NULL。但在WIN32下,使用虛擬內(nèi)存,不會(huì)耗盡的。

處理內(nèi)存耗盡大概有兩種。

A  *a = new A;

1       一處內(nèi)存申請(qǐng)

if(a == NULL)

{

     return;

     }

2    如果有多處申請(qǐng)內(nèi)存,則

if(a == NULL)

{

     cout << Memory Exhausted << endl;

     exit(1);

}

 

newdelete使用要點(diǎn)

1 new內(nèi)置了sizeof、類型轉(zhuǎn)換和類型安全檢查功能。

2 new在創(chuàng)建非內(nèi)部數(shù)據(jù)類型的動(dòng)態(tài)對(duì)象的同時(shí)完成了初始化工作。

3 對(duì)象有多個(gè)構(gòu)造函數(shù),那么new的語(yǔ)句也可以有多種形式。

例如:diary files\obj.txt

4 如果用new創(chuàng)建對(duì)象數(shù)組,那么只能使用對(duì)象的無(wú)參數(shù)構(gòu)造函數(shù)。例如

     Obj  *objects = new Obj[100];    // 創(chuàng)建100個(gè)動(dòng)態(tài)對(duì)象

不能寫成

     Obj  *objects = new Obj[100](1);// 創(chuàng)建100個(gè)動(dòng)態(tài)對(duì)象的同時(shí)賦初值1

5在用delete釋放對(duì)象數(shù)組時(shí),留意不要丟了符號(hào)‘[]’。例如

     delete []objects;  // 正確的用法

delete objects;    // 錯(cuò)誤的用法

后者相當(dāng)于delete objects[0],漏掉了另外99個(gè)對(duì)象。

posted @ 2007-08-13 10:12 寶杉 閱讀(428) | 評(píng)論 (0)編輯 收藏

數(shù)組要么在靜態(tài)存儲(chǔ)區(qū)被創(chuàng)建(如全局?jǐn)?shù)組),要么在棧上被創(chuàng)建。數(shù)組名對(duì)應(yīng)著(而不是指向)一塊內(nèi)存,其地址與容量在生命期內(nèi)保持不變,只有數(shù)組的內(nèi)容可以改變。

指針可以隨時(shí)指向任意類型的內(nèi)存塊,它的特征是“可變”,所以我們常用指針來(lái)操作動(dòng)態(tài)內(nèi)存。指針遠(yuǎn)比數(shù)組靈活,但也更危險(xiǎn)。

1 修改內(nèi)容

       char a[] = "hello";

       a[0] = 'X';

       cout << a << endl;

       char *p = "world";     // 注意p指向常量字符串

       p[0] = 'X';                 // 編譯器不能發(fā)現(xiàn)該錯(cuò)誤

       cout << p << endl;


2 復(fù)制與比較

strcpy(new type[strlen(a)+1]),而不能用p = a    //把a(bǔ)的地址給了p,而不是a的內(nèi)容

strcmp(if strcmp(a,p)== 0),而不能用      if( a = p)  

       // 數(shù)組…

       char a[] = "hello";

       char b[10];

       strcpy(b, a);                 // 不能用       b = a;

       if(strcmp(b, a) == 0)     // 不能用  if (b == a)

       // 指針…

       int len = strlen(a);

       char *p = (char *)malloc(sizeof(char)*(len+1));

       strcpy(p,a);                  // 不要用 p = a;

       if(strcmp(p, a) == 0)     // 不要用 if (p == a)

sizeof內(nèi)存容量計(jì)算

1           sizeof(p)相當(dāng)于sizeof(char*),C++不支持對(duì)指針?biāo)竷?nèi)容容量的計(jì)算。

char a[] = "hello world";

    char *p  = a;

    cout<< sizeof(a) << endl;   // 12字節(jié)

    cout<< sizeof(p) << endl;   // 4字節(jié)

2           數(shù)組作為函數(shù)參數(shù),退化成同類型指針。

void Func(char a[100])

    {

        cout<< sizeof(a) << endl;   // 4字節(jié)而不是100字節(jié)

}

指針參數(shù)傳遞內(nèi)存

首先,考慮函數(shù)為參數(shù)創(chuàng)建臨時(shí)副本的問題。對(duì)于值傳遞,有形參和實(shí)參的區(qū)別。但對(duì)于引用和指針傳遞,則可能會(huì)產(chǎn)生問題。

 

指針作為函數(shù)參數(shù),不能動(dòng)態(tài)申請(qǐng)內(nèi)存。

void GetMemory(char *p, int num)

{

       p = (char *)malloc(sizeof(char) * num);

}

void Test(void)

{

       char *str = NULL;

       GetMemory(str, 100);           // str 仍然為 NULL     

       strcpy(str, "hello");               // 運(yùn)行錯(cuò)誤

}

毛病出在函數(shù)GetMemory中。編譯器總是要為函數(shù)的每個(gè)參數(shù)制作臨時(shí)副本,指針參數(shù)p的副本是 _p,編譯器使 _p = p。如果函數(shù)體內(nèi)的程序修改了_p的內(nèi)容,就導(dǎo)致參數(shù)p的內(nèi)容作相應(yīng)的修改。這就是指針可以用作輸出參數(shù)的原因。在本例中,_p申請(qǐng)了新的內(nèi)存,只是把_p所指的內(nèi)存地址改變了,但是p絲毫未變。所以函數(shù)GetMemory并不能輸出任何東西。事實(shí)上,每執(zhí)行一次GetMemory就會(huì)泄露一塊內(nèi)存,因?yàn)闆]有用free釋放內(nèi)存。

如何改正:

1 用“指向指針的指針”

void GetMemory2(char **p, int num)          //**p

{

       *p = (char *)malloc(sizeof(char) * num);

}

void Test2(void)

{

       char *str = NULL;

       GetMemory2(&str, 100);                    // 注意參數(shù)是 &str,而不是str

       strcpy(str, "hello");

       cout<< str << endl;

       free(str);

}

2 用函數(shù)返回值來(lái)傳遞動(dòng)態(tài)內(nèi)存

char *GetMemory3(int num)

{

       char *p = (char *)malloc(sizeof(char) * num);

       return p;

}

void Test3(void)

{

       char *str = NULL;

       str = GetMemory3(100);      

       strcpy(str, "hello");

       cout<< str << endl;

       free(str);

}

注意

強(qiáng)調(diào)不要用return語(yǔ)句返回指向“棧內(nèi)存”的指針

char *GetString(void)

{

       char p[] = "hello world";

       return p;  // 編譯器將提出警告

}

void Test4(void)

{

char *str = NULL;

str = GetString();   // str 的內(nèi)容是垃圾

cout<< str << endl;

}

posted @ 2007-08-03 13:08 寶杉 閱讀(208) | 評(píng)論 (0)編輯 收藏

內(nèi)存分配方式

1 靜態(tài)存儲(chǔ)區(qū)域           全局變量 static

2 棧                            局部變量

3 動(dòng)態(tài)存儲(chǔ)區(qū)域(堆)(malloc free) (new delete)

 

常見錯(cuò)誤和對(duì)策

1 內(nèi)存分配未成功。

對(duì)策:程序入口處,檢查指針是否為NULL。

(1)參數(shù)*p所指向的內(nèi)存,用assert( p != NULL)

(2)malloc或new申請(qǐng)的內(nèi)存,用if ( p != NULL)

2 內(nèi)存未初始化。

3 內(nèi)存操作越界。

4 忘記釋放內(nèi)存,內(nèi)存泄露。

new與delete配對(duì)。

5 釋放內(nèi)存,卻繼續(xù)使用。

       (1)return不能返回“棧內(nèi)存指針”和“引用”,因?yàn)樵搩?nèi)存在函數(shù)結(jié)束時(shí)被銷毀。

       (2)釋放內(nèi)存后,設(shè)為NULL,防止“野指針”。

規(guī)則

1 申請(qǐng)內(nèi)存后檢查。assert( p != NULL)

2 數(shù)組、動(dòng)態(tài)內(nèi)存初始化。

3 申請(qǐng)釋放要配對(duì)。

4 釋放內(nèi)存設(shè)置NULL,防止產(chǎn)生野指針。

posted @ 2007-08-03 13:06 寶杉 閱讀(194) | 評(píng)論 (0)編輯 收藏

引用的主要作用:傳遞函數(shù)的參數(shù)和返回值。

C++語(yǔ)言中,函數(shù)的參數(shù)和返回值的傳遞方式有三種:值傳遞、指針傳遞和引用傳遞。

值傳遞

函數(shù)內(nèi)的形參是實(shí)參(外部變量)的一個(gè)拷貝,所以不會(huì)影響實(shí)參(外部變量)的值。

    void Func1(int x)

{

    x = x + 10;

}

int n = 0;

    Func1(n);

    cout << “n = ” << n << endl;  // n = 0

指針傳遞

    void Func2(int *x)

{

    (* x) = (* x) + 10;

}

int n = 0;

    Func2(&n);

    cout << “n = ” << n << endl;      // n = 10

引用傳遞

    void Func3(int &x)

{

    x = x + 10;

}

int n = 0;

    Func3(n);

    cout << “n = ” << n << endl;      // n = 10

指針功能強(qiáng)大,但非常危險(xiǎn)。恰如其分的使用“引用”,發(fā)揮其作用。

一般先考慮“引用”,如果“引用”不能做的事,則再用“指針”來(lái)完成。

posted @ 2007-08-03 13:05 寶杉 閱讀(201) | 評(píng)論 (0)編輯 收藏

pragma就是為了讓編譯器編譯出的C或C++程序與機(jī)器硬件和操作系統(tǒng)保持完全兼容而定義的宏擴(kuò)展,#pragma是和特定編譯器相關(guān)的。

 

一、Pragma說明(Directives)

C和C++程序的每次執(zhí)行都支持其所在的主機(jī)或操作系統(tǒng)所具有的一些獨(dú)特的特點(diǎn)。
一些程序,例如,需要精確控制數(shù)據(jù)存放的內(nèi)存區(qū)域或控制某個(gè)函數(shù)接收的參數(shù)。
#pragma指示為編譯器提供了一種在不同機(jī)器和操作系統(tǒng)上編譯以保持C和C++完全兼容的方法。Pragmas是由機(jī)器和相關(guān)的操作系統(tǒng)定義的,通常對(duì)每個(gè)編譯器來(lái)說是不同的。

 

二、語(yǔ)法(Syntax)

#pragma token-string(特征字符串)特征字符串是一連串的字符,就是要給一個(gè)特定編譯器提供說明和編譯意見。

符號(hào)(#)必須是pragma所在那一行的第一個(gè)非空格字符;
#號(hào)和pragma之間可以有任意個(gè)空格符。
在#pragma之后,是可以被編譯器解析的預(yù)處理特征字符。
一般認(rèn)為,#pragma屬于宏擴(kuò)展。
如果編譯器發(fā)現(xiàn)不認(rèn)識(shí)的pragma,會(huì)提出警告,但繼續(xù)編譯下去。

Pragmas可以用在條件聲明上,提供最新的功能性的預(yù)處理程序,或者提供給編譯器定義執(zhí)行的信息。

其格式一般為: #pragma  para 

其中para為參數(shù),下面來(lái)看一些常用的參數(shù)。


alloc_text
comment //注釋
init_seg1 
optimize  //最優(yōu)化
auto_inline
component  //組成部件
inline_depth
pack       //包
bss_seg
data_seg
inline_recursion  //內(nèi)嵌遞歸
pointers_to_members1
check_stack
function   
intrinsic  //內(nèi)在的
setlocale
code_seg
hdrstop
message 
vtordisp1
const_seg
include_alias
once
warning


 

參數(shù)詳解

diary files\#pragma  預(yù)處理指令詳解.doc

posted @ 2007-08-03 13:04 寶杉 閱讀(288) | 評(píng)論 (0)編輯 收藏

   * 非遞歸鎖:非遞歸鎖提供互斥的一種高效的形式,它定義一個(gè)臨界區(qū),每一時(shí)刻只有單個(gè)線程可在其中執(zhí)行。它們之所以是非遞歸的,是因?yàn)楫?dāng)前擁有鎖的線程在將其釋放前不可以再次獲取它。否則,就會(huì)立即發(fā)生死鎖。SunOS 5.x通過它的mutex_trwlock_t,和sema_t類型(POSIX Pthreads不提供后兩種同步機(jī)制)為非遞歸鎖提供支持。ASX構(gòu)架提供MutexRW_Mutex,和Semaphore包裝,以分別封裝這些語(yǔ)義。

   * 遞歸鎖:另外一方面,遞歸鎖允許acquire方法嵌套調(diào)用,只要當(dāng)前擁有該鎖的線程就是試圖重新獲取它的線程。遞歸鎖對(duì)于回調(diào)驅(qū)動(dòng)的事件分派構(gòu)架(比如1.3.2描述的反應(yīng)堆)特別有用,在其中構(gòu)架的事件循環(huán)執(zhí)行對(duì)預(yù)登記的用戶定義的對(duì)象的回調(diào)。因?yàn)殡S后用戶定義的對(duì)象可能經(jīng)由它的方法入口重入分派構(gòu)架,必須使用遞歸鎖以防止在回調(diào)過程中構(gòu)架持有的鎖發(fā)生死鎖。

posted @ 2007-08-03 13:03 寶杉 閱讀(3617) | 評(píng)論 (2)編輯 收藏

僅列出標(biāo)題
共4頁(yè): 1 2 3 4 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            鲁大师影院一区二区三区| 亚洲精品看片| 红桃视频一区| 狠狠噜噜久久| 影音欧美亚洲| 亚洲美女免费精品视频在线观看| 激情校园亚洲| 亚洲精品之草原avav久久| 一区二区三区欧美视频| 欧美一级淫片aaaaaaa视频| 久久国产精品黑丝| 欧美激情视频一区二区三区在线播放| 欧美国产在线视频| 一区二区不卡在线视频 午夜欧美不卡在| 在线视频日韩| 老鸭窝毛片一区二区三区| 欧美色综合网| 好看的亚洲午夜视频在线| 99国产精品99久久久久久| 欧美在线999| 亚洲欧洲精品一区| 久久精品二区三区| 欧美午夜剧场| 亚洲黄色在线视频| 欧美在线短视频| 亚洲伦理久久| 老牛影视一区二区三区| 国产麻豆视频精品| 一区二区三区黄色| 欧美成人免费在线| 亚洲一区二区三| 欧美精品一区二区三区四区| 黄色成人av网站| 亚洲欧美综合v| 欧美激情精品| 久久久久久久成人| 国产精品久久久久免费a∨| 亚洲国产成人porn| 久久综合色影院| 欧美亚洲一级| 国产美女精品免费电影| 在线亚洲成人| 亚洲欧洲日产国产综合网| 久久伊人亚洲| 尤物99国产成人精品视频| 午夜免费久久久久| 99re6这里只有精品| 蜜臀va亚洲va欧美va天堂| 在线成人www免费观看视频| 久久久久久久久久久一区| 国产一区三区三区| 亚洲黄网站黄| 欧美不卡三区| 久久精品一区二区三区不卡牛牛| 国产精品美女www爽爽爽| 亚洲最黄网站| 亚洲三级网站| 欧美成人嫩草网站| 亚洲高清免费视频| 蜜乳av另类精品一区二区| 中文亚洲字幕| 国产精品福利在线| 亚洲中字黄色| 亚洲午夜一区| 国产精品久久久久久久久久免费看| 亚洲免费观看在线观看| 亚洲黄色成人| 欧美日韩国产一区精品一区| 一区二区三区免费网站| 亚洲天堂偷拍| 国产美女一区二区| 欧美一级艳片视频免费观看| 欧美一区二区视频在线| 在线观看欧美激情| 亚洲国产综合在线| 国产精品播放| 久久精品成人| 久久综合九色综合久99| 日韩亚洲欧美一区| 亚洲一区二区三区欧美| 国产专区精品视频| 亚洲国产精品高清久久久| 欧美日本精品一区二区三区| 午夜免费电影一区在线观看| 久久久久久久网站| 亚洲乱码视频| 亚洲网站在线观看| 国产综合色一区二区三区| 亚洲第一区在线观看| 欧美日韩在线直播| 久久久水蜜桃| 欧美精品麻豆| 欧美在线短视频| 欧美国产免费| 久久久999成人| 欧美日本不卡高清| 久久激情综合| 欧美日韩性生活视频| 狼狼综合久久久久综合网| 欧美日韩激情网| 美女视频黄a大片欧美| 欧美午夜一区二区福利视频| 久久亚洲一区二区三区四区| 欧美日韩精品在线观看| 免费人成精品欧美精品| 国产精品网站视频| 亚洲精品一区二区三区婷婷月 | 99re热这里只有精品免费视频| 国产精品一区二区久激情瑜伽| 久久人人爽人人爽| 欧美日韩不卡视频| 免费久久99精品国产自在现线| 国产精品av一区二区| 欧美α欧美αv大片| 国产日本精品| 夜夜爽av福利精品导航| 亚洲国产日韩综合一区| 欧美与黑人午夜性猛交久久久| 一本色道久久88综合日韩精品| 久久国产精品久久精品国产 | 久久亚洲综合色一区二区三区| 欧美女同视频| 亚洲成色777777女色窝| 狠狠色综合色区| 欧美诱惑福利视频| 久久精品国产精品亚洲精品| 国产精品毛片| 亚洲一区二区三区高清不卡| 亚洲一区二区三区影院| 欧美日韩另类综合| 日韩视频欧美视频| 亚洲天堂免费在线观看视频| 欧美日韩一区二区免费在线观看| 亚洲国产一区二区a毛片| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲男同1069视频| 午夜视频在线观看一区二区| 欧美视频官网| 一本久道综合久久精品| 亚洲午夜精品视频| 国产精品国产馆在线真实露脸| 亚洲精选一区二区| 制服丝袜亚洲播放| 国产精品乱码久久久久久| 亚洲一区在线观看免费观看电影高清| 亚洲视频日本| 国产精品v欧美精品v日韩 | 欧美一区国产在线| 欧美在线观看视频| 国产人妖伪娘一区91| 久久精品国产免费看久久精品| 久久婷婷人人澡人人喊人人爽| 在线成人激情| 欧美精品在线一区| 中文精品一区二区三区 | 日韩视频在线观看免费| 欧美大胆成人| 国产精品99久久久久久久久| 午夜久久久久久| 伊人婷婷欧美激情| 欧美国内亚洲| 亚洲少妇自拍| 久久久免费精品| 日韩亚洲欧美一区二区三区| 国产精品美女久久久久久免费| 亚洲欧美日韩国产一区| 免费国产自线拍一欧美视频| 一区二区国产精品| 国产视频精品网| 国产情侣一区| 久久成人免费网| 亚洲第一精品福利| 午夜国产精品视频| 亚洲高清在线视频| 国产精品老牛| 男女av一区三区二区色多| 99re6这里只有精品视频在线观看| 久久国产日韩| 亚洲美女在线观看| 国产日韩免费| 欧美日韩国产影院| 久久一区二区三区四区五区| 亚洲一区不卡| 欧美国产精品久久| 欧美在线观看日本一区| 日韩亚洲在线| 在线免费观看日本一区| 国产精品久线观看视频| 欧美激情四色 | 亚洲国产另类久久久精品极度| 欧美日韩国产在线看| 久久久久久久波多野高潮日日| 一区二区日韩精品| 亚洲国产一二三| 狼人社综合社区| 欧美一区二区在线免费观看| 亚洲视频一二三| 99国产精品久久久久久久成人热| 国产日韩欧美一区| 国产精品一二一区|