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

寶杉的博客

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>
            亚洲综合精品自拍| 宅男66日本亚洲欧美视频 | 亚洲性av在线| 正在播放欧美视频| 亚洲综合色丁香婷婷六月图片| 亚洲视频在线播放| 性久久久久久久| 久久网站热最新地址| 噜噜噜久久亚洲精品国产品小说| 久久一区二区视频| 欧美日韩精品免费在线观看视频| 欧美日韩综合不卡| 国内免费精品永久在线视频| 亚洲国产专区校园欧美| 在线亚洲观看| 久久久久成人网| 亚洲国产一二三| 一区二区三区**美女毛片| 欧美一级大片在线观看| 欧美激情视频一区二区三区不卡| 国产精品a久久久久久| 国模吧视频一区| 一区二区三区日韩精品视频| 久久精品国产成人| 亚洲欧洲久久| 欧美在线免费观看| 欧美老女人xx| 国内一区二区三区| 亚洲影视中文字幕| 欧美黄色aa电影| 性做久久久久久久久| 亚洲国产美女精品久久久久∴| 日韩网站在线观看| 午夜一区二区三区不卡视频| 欧美亚洲三区| 欧美韩日一区| 亚洲一区精彩视频| 美女国内精品自产拍在线播放| 欧美精品久久久久久久免费观看 | 一区二区在线视频播放| 99精品国产高清一区二区 | 麻豆久久久9性大片| 洋洋av久久久久久久一区| 久久精品视频免费播放| 国产精品高清在线| 日韩亚洲欧美成人| 欧美v国产在线一区二区三区| 亚洲制服av| 国产精品99免视看9| 亚洲另类自拍| 亚洲国产高潮在线观看| 久久九九电影| 国产亚洲欧美另类中文| 欧美一级午夜免费电影| 一区二区三区四区精品| 欧美激情一区二区三区在线视频观看 | 亚洲第一精品夜夜躁人人躁| 久久av红桃一区二区小说| 亚洲免费观看高清完整版在线观看熊| 久久尤物视频| 尤物精品在线| 麻豆国产精品777777在线| 欧美中文在线观看| 国产一区二区三区黄视频| 久久精品一区二区三区四区| 亚洲性视频网址| 国产精品亚洲成人| 欧美一区二区三区视频在线观看| 亚洲视频精选在线| 国产乱码精品1区2区3区| 久久动漫亚洲| 久久久噜噜噜久久人人看| 亚洲电影天堂av| 亚洲日本免费| 国产精品久在线观看| 欧美在现视频| 久久久久久噜噜噜久久久精品| 欧美一区二区三区视频| 亚洲精品午夜精品| 欧美日韩国产一级片| 夜夜嗨av色一区二区不卡| 亚洲成色www久久网站| 欧美成人免费在线视频| 女生裸体视频一区二区三区| 99精品欧美一区二区三区| 日韩一级精品| 国产婷婷一区二区| 亚洲电影免费观看高清完整版| 免费观看日韩av| 亚洲少妇最新在线视频| 亚洲欧美日韩国产综合精品二区| 狠狠久久综合婷婷不卡| 亚洲精品久久久久久久久| 国产精品自拍在线| 亚洲国产精品一区二区第四页av| 国产精品成人一区二区三区吃奶| 久久er精品视频| 美日韩精品免费| 午夜精品久久久久| 女人香蕉久久**毛片精品| 性欧美超级视频| 欧美激情第1页| 久久久久网址| 国产精品欧美风情| 亚洲人成在线影院| 在线播放中文字幕一区| 亚洲一区二区视频| 99精品国产福利在线观看免费| 性伦欧美刺激片在线观看| 夜夜嗨一区二区| 久久免费视频在线| 欧美在线亚洲在线| 欧美日韩中文另类| 亚洲黄一区二区| 亚洲第一福利在线观看| 欧美亚洲一区| 亚洲欧美一区二区原创| 欧美日韩国产免费| 亚洲国产精品成人| 亚洲国产精品一区制服丝袜 | 中文国产一区| 亚洲久久成人| 久久先锋资源| 久久久国产成人精品| 国产精品免费看| 亚洲精品美女免费| 亚洲剧情一区二区| 欧美激情小视频| 亚洲国产精品久久人人爱蜜臀| 亚洲高清视频一区二区| 久久精品亚洲热| 久久免费一区| 激情小说亚洲一区| 久久婷婷国产综合精品青草| 老司机免费视频一区二区三区| 国产日韩久久| 欧美一区国产在线| 亚洲欧美日韩一区二区三区在线观看 | 亚洲日本理论电影| 久久久久成人精品免费播放动漫| 午夜在线电影亚洲一区| 国产精品大片免费观看| 亚洲午夜影视影院在线观看| 亚洲午夜激情网页| 国产精品视频精品| 欧美在线观看你懂的| 久久中文字幕一区二区三区| 激情自拍一区| 欧美二区在线观看| 99国产精品一区| 西瓜成人精品人成网站| 国产日韩欧美综合一区| 在线视频日韩精品| 欧美激情成人在线| 蜜桃av一区二区在线观看| 性色av一区二区三区红粉影视| 欧美日韩国产天堂| 99热免费精品在线观看| 正在播放亚洲| 国产精品免费观看在线| 午夜亚洲性色视频| 免费在线国产精品| 亚洲毛片av在线| 国产精品jvid在线观看蜜臀| 亚洲午夜一区二区| 久久这里只有| 一区二区三区免费在线观看| 国产精品成人一区二区艾草| 午夜精品一区二区三区在线| 美女久久一区| 这里只有视频精品| 国产午夜精品美女视频明星a级| 久久久一区二区| 日韩亚洲精品在线| 久久久久国产一区二区三区四区 | 久热精品视频在线| 99热这里只有精品8| 久久久蜜桃一区二区人| 亚洲精选视频在线| 国产香蕉97碰碰久久人人| 免费在线看成人av| 亚洲欧美韩国| 亚洲欧洲精品一区二区三区不卡 | 亚洲精品乱码久久久久久黑人| 亚洲一区二区成人在线观看| 韩国av一区二区三区在线观看| 欧美精品色网| 久久久久久久久综合| 在线视频日韩精品| 亚洲国产精品久久久久久女王| 欧美一区二视频在线免费观看| 国产欧美91| 日韩亚洲一区二区| 国产一区二区三区在线观看视频| 欧美高清视频一区| 久久久久久久91| 午夜精品久久久久久久99水蜜桃 | 亚洲三级电影在线观看| 国内精品免费午夜毛片| 欧美亚洲成人网|