国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

別再被坑了!C++ 重載 vs 重寫(xiě),這篇文章讓你秒懂區(qū)別

開(kāi)發(fā)
今天咱們聊個(gè)老生常談但又經(jīng)常被搞混的話題——函數(shù)重載和函數(shù)重寫(xiě)。保證你看完之后,再也不會(huì)傻傻分不清楚了!

大家好,我是小康。

今天咱們聊個(gè)老生常談但又經(jīng)常被搞混的話題——函數(shù)重載和函數(shù)重寫(xiě)。

說(shuō)真的,每次面試的時(shí)候,面試官總愛(ài)問(wèn)這個(gè)問(wèn)題。我敢打賭,十個(gè)程序員有九個(gè)都在這兒栽過(guò)跟頭。要么就是概念搞混了,要么就是說(shuō)得云里霧里的,讓面試官一臉懵逼。

今天我就用最簡(jiǎn)單粗暴的方式,把這倆貨給你講明白。保證你看完之后,再也不會(huì)傻傻分不清楚了!

一、先來(lái)個(gè)形象的比喻

想象一下,你家樓下有個(gè)包子鋪,老板姓張。

  • 函數(shù)重載就像是:張老板會(huì)做包子,但他能做肉包子、菜包子、豆沙包子。雖然都叫"做包子",但根據(jù)你給的材料不同,他做出來(lái)的包子也不一樣。同一個(gè)人,同一個(gè)技能名字,但是根據(jù)輸入的不同,輸出也不同。
  • 函數(shù)重寫(xiě)就像是:張老板退休了,他兒子小張接手了包子鋪。小張也會(huì)"做包子",但他的做法跟他爸完全不一樣,可能更好吃,也可能更難吃。不同的人,同一個(gè)技能名字,但實(shí)現(xiàn)方式完全不同。

怎么樣,是不是一下子就明白了?

二、函數(shù)重載:同名不同參

1. 啥是函數(shù)重載?

簡(jiǎn)單說(shuō),就是同一個(gè)類里面,方法名字一樣,但參數(shù)不一樣。編譯器會(huì)根據(jù)你傳的參數(shù)來(lái)決定調(diào)用哪個(gè)方法。

就像你去餐廳點(diǎn)菜:

  • "來(lái)份炒飯!"(無(wú)參數(shù))
  • "來(lái)份炒飯,要辣的!"(一個(gè)參數(shù))
  • "來(lái)份炒飯,要辣的,多放肉!"(兩個(gè)參數(shù))

服務(wù)員會(huì)根據(jù)你的要求做出不同的炒飯。

2. 代碼實(shí)戰(zhàn)

#include <iostream>
#include <string>
using namespace std;

class Cook {
public:
    // 基礎(chǔ)版炒飯
    void makeFriedRice() {
        cout << "做了一份普通炒飯" << endl;
    }
    
    // 帶辣度的炒飯
    void makeFriedRice(string spicy) {
        cout << "做了一份" << spicy << "的炒飯" << endl;
    }
    
    // 帶辣度和配菜的炒飯
    void makeFriedRice(string spicy, string ingredient) {
        cout << "做了一份" << spicy << "的炒飯,加了" << ingredient << endl;
    }
    
    // 連數(shù)量都能指定
    void makeFriedRice(int count, string spicy) {
        cout << "做了" << count << "份" << spicy << "的炒飯" << endl;
    }
    
    // 還可以重載構(gòu)造函數(shù)
    Cook() {
        cout << "廚師準(zhǔn)備就緒!" << endl;
    }
    
    Cook(string name) {
        cout << "廚師" << name << "準(zhǔn)備就緒!" << endl;
    }
};

// 測(cè)試一下
int main() {
    Cook chef("老王");
    
    chef.makeFriedRice();                      // 輸出:做了一份普通炒飯
    chef.makeFriedRice("微辣");                // 輸出:做了一份微辣的炒飯
    chef.makeFriedRice("中辣", "牛肉");        // 輸出:做了一份中辣的炒飯,加了牛肉
    chef.makeFriedRice(3, "變態(tài)辣");           // 輸出:做了3份變態(tài)辣的炒飯
    
    return0;
}

看到了嗎?同樣是makeFriedRice這個(gè)方法名,但根據(jù)你傳的參數(shù)不同,執(zhí)行的邏輯也不同。編譯器很聰明,它會(huì)自動(dòng)幫你選擇合適的方法。

3. 重載的規(guī)則(劃重點(diǎn)!)

  • 方法名必須相同 - 這是基本要求
  • 參數(shù)列表必須不同 - 要么數(shù)量不同,要么類型不同,要么順序不同
  • 返回值類型可以相同也可以不同 - 但不能僅僅通過(guò)返回值類型來(lái)區(qū)分重載
  • 在同一個(gè)作用域內(nèi)(同一個(gè)類)

記住:編譯器是通過(guò)參數(shù)來(lái)區(qū)分調(diào)用哪個(gè)函數(shù)的,跟返回值沒(méi)關(guān)系!

三、函數(shù)重寫(xiě):子承父業(yè),青出于藍(lán)

1. 啥是函數(shù)重寫(xiě)?

函數(shù)重寫(xiě)發(fā)生在繼承關(guān)系中。子類重新實(shí)現(xiàn)父類的方法,方法名、參數(shù)都一樣,但實(shí)現(xiàn)邏輯不同。

就像爸爸教你騎自行車的方法是"勇敢地騎上去",但你教你兒子的方法可能是"先學(xué)會(huì)平衡,再慢慢來(lái)"。同樣是"學(xué)騎車"這個(gè)方法,但實(shí)現(xiàn)方式完全不同。

2. 代碼實(shí)戰(zhàn)
#include <iostream>
#include <string>
using namespace std;

// 父類 - 老爸的教學(xué)方式
class OldTeacher {
public:
    virtual void teachBikeRiding() {  // virtual關(guān)鍵字是重點(diǎn)!
        cout << "老爸的方法:別怕,直接騎上去,摔幾次就會(huì)了!" << endl;
    }
    
    virtual void teachSwimming() {
        cout << "老爸的方法:扔到水里,不會(huì)游多喝水,自然就學(xué)會(huì)了!" << endl;
    }
    
    // 虛析構(gòu)函數(shù),養(yǎng)成好習(xí)慣
    virtual ~OldTeacher() {
        cout << "老爸累了,休息去了" << endl;
    }
};

// 子類 - 新一代的教學(xué)方式
class ModernTeacher :public OldTeacher {
public:
    void teachBikeRiding() override {  // override關(guān)鍵字確保我們真的在重寫(xiě)
        cout << "現(xiàn)代方法:先練平衡,戴好護(hù)具,循序漸進(jìn),安全第一!" << endl;
    }
    
    void teachSwimming() override {
        cout << "現(xiàn)代方法:從淺水區(qū)開(kāi)始,學(xué)會(huì)漂浮,再學(xué)動(dòng)作,科學(xué)訓(xùn)練!" << endl;
    }
    
    // 子類還可以有自己獨(dú)有的方法
    void teachOnline() {
        cout << "現(xiàn)代獨(dú)有:在線視頻教學(xué)輔助指導(dǎo)" << endl;
    }
    
    ~ModernTeacher() {
        cout << "現(xiàn)代老師下班了" << endl;
    }
};

// 測(cè)試一下
int main() {
    OldTeacher dad;
    ModernTeacher son;
    
    cout << "爸爸的教學(xué)方法:" << endl;
    dad.teachBikeRiding();      // 輸出:老爸的方法:別怕,直接騎上去,摔幾次就會(huì)了!
    dad.teachSwimming();        // 輸出:老爸的方法:扔到水里,不會(huì)游多喝水,自然就學(xué)會(huì)了!
    
    cout << "\n兒子的教學(xué)方法:" << endl;
    son.teachBikeRiding();      // 輸出:現(xiàn)代方法:先練平衡,戴好護(hù)具,循序漸進(jìn),安全第一!
    son.teachSwimming();        // 輸出:現(xiàn)代方法:從淺水區(qū)開(kāi)始,學(xué)會(huì)漂浮,再學(xué)動(dòng)作,科學(xué)訓(xùn)練!
    son.teachOnline();          // 輸出:現(xiàn)代獨(dú)有:在線視頻教學(xué)輔助指導(dǎo)
    
    // 多態(tài)的魅力 - C++的精髓所在!
    cout << "\n多態(tài)演示:" << endl;
    OldTeacher* teacher = new ModernTeacher();  // 父類指針指向子類對(duì)象
    teacher->teachBikeRiding(); // 輸出:現(xiàn)代方法:先練平衡,戴好護(hù)具,循序漸進(jìn),安全第一!
    
    delete teacher;  // 記得釋放內(nèi)存
    
    return 0;
}

最后那個(gè)多態(tài)的例子特別有意思!雖然teacher的類型是OldTeacher,但它實(shí)際指向的是ModernTeacher對(duì)象,所以調(diào)用的是子類重寫(xiě)后的方法。這就是面向?qū)ο缶幊痰镊攘λ冢?/p>

3. 重寫(xiě)的規(guī)則(又是重點(diǎn)!)

  • 必須有繼承關(guān)系 - 沒(méi)有父子關(guān)系就不叫重寫(xiě)
  • 父類方法必須是virtual - 這是C++特有的,沒(méi)有virtual就不是真正的重寫(xiě)
  • 方法名、參數(shù)列表、返回值類型都必須相同 - 一模一樣
  • 子類建議使用 override 關(guān)鍵字 -  (C++11推薦,不是必須但建議用)
  • 基類析構(gòu)函數(shù)最好聲明為virtual - 避免內(nèi)存泄漏問(wèn)題

四、來(lái)個(gè)終極對(duì)比

特征

函數(shù)重載(Overload)

函數(shù)重寫(xiě)(Override)

發(fā)生位置

同一個(gè)類內(nèi)

父子類之間

方法名

必須相同

必須相同

參數(shù)列表

必須不同

必須相同

返回值類型

可以不同

必須相同

決定時(shí)機(jī)

編譯時(shí)決定

運(yùn)行時(shí)決定

關(guān)鍵詞

無(wú)特殊關(guān)鍵詞

virtual + override

目的

提供多種調(diào)用方式

改變父類行為

C++特色

支持操作符重載

需要virtual才能多態(tài)

五、C++獨(dú)有的騷操作

1. 操作符重載

C++最牛逼的地方就是可以重載操作符!比如你可以讓兩個(gè)對(duì)象直接用+號(hào)相加:

#include <iostream>
using namespace std;

class Point {
private:
    int x, y;
    
public:
    Point(int x = 0, int y = 0) : x(x), y(y) {}
    
    // 重載+操作符
    Point operator+(const Point& other) {
        return Point(x + other.x, y + other.y);
    }
    
    // 重載<<操作符,方便輸出
    friend ostream& operator<<(ostream& os, const Point& p) {
        os << "(" << p.x << ", " << p.y << ")";
        return os;
    }
};

int main() {
    Point p1(1, 2);
    Point p2(3, 4);
    Point p3 = p1 + p2;  // 直接用+號(hào)!
    
    cout << p1 << " + " << p2 << " = " << p3 << endl;
    // 輸出:(1, 2) + (3, 4) = (4, 6)
    
    return 0;
}

2. 函數(shù)模板重載

C++還支持模板函數(shù)的重載:

#include <iostream>
using namespace std;

// 普通函數(shù)
int add(int a, int b) {
    cout << "調(diào)用了int版本的add" << endl;
    return a + b;
}

// 模板函數(shù)
template<typename T>
T add(T a, T b) {
    cout << "調(diào)用了模板版本的add" << endl;
    return a + b;
}

int main() {
    cout << add(1, 2) << endl;          // 調(diào)用普通函數(shù)
    cout << add(1.5, 2.5) << endl;     // 調(diào)用模板函數(shù)
    cout << add<int>(1, 2) << endl;    // 強(qiáng)制調(diào)用模板函數(shù)
    
    return 0;
}

3. 重載的應(yīng)用

想想你平時(shí)用的cout:

#include <iostream>
using namespace std;

int main() {
    cout << "字符串" << endl;     // 輸出字符串
    cout << 123 << endl;          // 輸出整數(shù)
    cout << 3.14 << endl;         // 輸出浮點(diǎn)數(shù)
    cout << true << endl;         // 輸出布爾值
    
    return 0;
}

這就是重載!同一個(gè)<<操作符,但可以接受不同類型的參數(shù)。

還有構(gòu)造函數(shù)重載:

class Student {
private:
    string name;
    int age;
    
public:
    // 默認(rèn)構(gòu)造函數(shù)
    Student() : name("未知"), age(0) {
        cout << "創(chuàng)建了一個(gè)未知學(xué)生" << endl;
    }
    
    // 只有姓名的構(gòu)造函數(shù)
    Student(string n) : name(n), age(0) {
        cout << "創(chuàng)建了學(xué)生:" << name << endl;
    }
    
    // 完整信息的構(gòu)造函數(shù)
    Student(string n, int a) : name(n), age(a) {
        cout << "創(chuàng)建了學(xué)生:" << name << ",年齡:" << age << endl;
    }
};

int main() {
    Student s1;                    // 調(diào)用默認(rèn)構(gòu)造函數(shù)
    Student s2("小明");            // 調(diào)用單參數(shù)構(gòu)造函數(shù)  
    Student s3("小紅", 18);        // 調(diào)用雙參數(shù)構(gòu)造函數(shù)
    
    return 0;
}

4. 重寫(xiě)的應(yīng)用

比如做一個(gè)圖形繪制程序:

#include <iostream>
using namespace std;

class Shape {
public:
    virtual void draw() = 0;  // 純虛函數(shù),子類必須實(shí)現(xiàn)
    virtual double getArea() = 0;
    virtual ~Shape() {}  // 虛析構(gòu)函數(shù)
};

class Circle :public Shape {
private:
    double radius;
    
public:
    Circle(double r) : radius(r) {}
    
    void draw() override {
        cout << "畫(huà)一個(gè)圓形 ?,半徑:" << radius << endl;
    }
    
    double getArea() override {
        return3.14159 * radius * radius;
    }
};

class Rectangle :public Shape {
private:
    double width, height;
    
public:
    Rectangle(double w, double h) : width(w), height(h) {}
    
    void draw() override {
        cout << "畫(huà)一個(gè)矩形 ?,寬:" << width << ",高:" << height << endl;
    }
    
    double getArea() override {
        return width * height;
    }
};

class Triangle :public Shape {
private:
    double base, height;
    
public:
    Triangle(double b, double h) : base(b), height(h) {}
    
    void draw() override {
        cout << "畫(huà)一個(gè)三角形 ??,底:" << base << ",高:" << height << endl;
    }
    
    double getArea() override {
        return 0.5 * base * height;
    }
};

int main() {
    Shape* shapes[] = {
        new Circle(5),
        new Rectangle(4, 6),
        new Triangle(3, 8)
    };
    
    for (int i = 0; i < 3; i++) {
        shapes[i]->draw();
        cout << "面積:" << shapes[i]->getArea() << endl << endl;
        delete shapes[i];  // 釋放內(nèi)存
    }
    
    return 0;
}

每個(gè)子類都重寫(xiě)了draw和getArea方法,實(shí)現(xiàn)自己特有的繪制邏輯。

六、面試官最愛(ài)問(wèn)的陷阱題

陷阱一:函數(shù)隱藏(最坑的那種!)

class Parent {
public:
    void show() {
        cout << "Parent的無(wú)參show" << endl;
    }
    
    void show(int x) {
        cout << "Parent的帶參show: " << x << endl;
    }
};

class Child :public Parent {
public:
    void show() {  // 注意:這里沒(méi)有virtual!
        cout << "Child的show" << endl;
    }
};

int main() {
    Child c;
    c.show();      // 正常調(diào)用Child的show
    c.show(100);   // 編譯錯(cuò)誤!為什么?
    
    return 0;
}

答案:這既不是重載也不是重寫(xiě),而是函數(shù)隱藏!

Child類的show()把Parent類的所有show方法都隱藏了!即使Parent有show(int)版本,Child對(duì)象也看不見(jiàn)。

要解決這個(gè)問(wèn)題,需要用using關(guān)鍵字:

class Child : public Parent {
public:
    using Parent::show;  // 把父類的show方法都"拉"過(guò)來(lái)
    
    void show() {
        cout << "Child的show" << endl;
    }
};

陷阱二:非虛函數(shù)的偽重寫(xiě)

class Base {
public:
    void func() {  // 注意:沒(méi)有virtual
        cout << "Base::func" << endl;
    }
};

class Derived :public Base {
public:
    void func() {  // 看起來(lái)像重寫(xiě),其實(shí)不是!
        cout << "Derived::func" << endl;
    }
};

int main() {
    Base* ptr = new Derived();
    ptr->func();  // 輸出什么?
    
    delete ptr;
    return 0;
}

答案:輸出"Base::func"!

因?yàn)锽ase的func不是虛函數(shù),所以這不是重寫(xiě),只是函數(shù)隱藏。通過(guò)父類指針調(diào)用時(shí),永遠(yuǎn)調(diào)用的是父類版本。

陷阱三:const重載的陷阱

class Test {
public:
    void print() {
        cout << "非const版本" << endl;
    }
    
    void print() const {  // 這是重載!
        cout << "const版本" << endl;
    }
};

int main() {
    Test t1;
    const Test t2;
    
    t1.print();  // 調(diào)用哪個(gè)?
    t2.print();  // 調(diào)用哪個(gè)?
    
    return 0;
}

答案:

  • t1調(diào)用非const版本
  • t2調(diào)用const版本

這是C++特有的const重載,很多人不知道const也能構(gòu)成重載條件!

七、記憶口訣

最后給大家一個(gè)超好記的口訣:

重載看參數(shù),參數(shù)不同才叫重載,重寫(xiě)看繼承,父子同名才叫重寫(xiě)(父類要有virtual)

八、總結(jié)

好了,到這里應(yīng)該徹底搞明白了吧?

  • 函數(shù)重載:同一個(gè)類里,方法名相同,參數(shù)不同,給用戶提供多種調(diào)用方式
  • 函數(shù)重寫(xiě):父子類間,父類方法必須是virtual,子類用override重新實(shí)現(xiàn),方法簽名完全相同 ,子類改變父類的實(shí)現(xiàn)。

下次面試官再問(wèn)這個(gè)問(wèn)題,你就可以自信地回答了。不僅要說(shuō)出區(qū)別,最好還能舉個(gè)生動(dòng)的例子,保證讓面試官印象深刻!

記住,編程不是死記硬背,而是要理解其中的道理。這兩個(gè)概念理解了,面向?qū)ο缶幊痰拇箝T(mén)就向你敞開(kāi)了一半!

責(zé)任編輯:趙寧寧 來(lái)源: 跟著小康學(xué)編程
相關(guān)推薦

2025-03-10 00:17:00

2025-06-23 10:05:00

C++模板函數(shù)模板

2019-01-30 13:44:34

JVM內(nèi)存服務(wù)器

2017-08-09 15:07:08

大數(shù)據(jù)數(shù)據(jù)分析戶畫(huà)像

2021-02-24 07:38:50

Redis

2024-01-17 08:18:14

RPAJava技術(shù)

2021-04-16 16:37:23

SpringMVC源碼配置

2015-11-10 09:17:29

重構(gòu)程序員代碼

2021-10-14 06:36:38

存儲(chǔ)云存儲(chǔ)本地存儲(chǔ)

2015-10-12 17:11:34

老板重構(gòu)系統(tǒng)

2024-03-22 18:40:27

腦機(jī)接口機(jī)器人人工智能

2020-11-01 17:00:04

重載重寫(xiě)java

2023-09-22 22:49:15

C++重載重寫(xiě)

2025-03-28 08:53:51

2021-03-04 09:26:57

微服務(wù)架構(gòu)數(shù)據(jù)

2019-10-16 08:25:33

JavaScriptwebprototype

2021-01-19 06:05:28

Python數(shù)據(jù)分析編程語(yǔ)言

2025-07-22 08:08:28

2015-12-02 18:11:06

百度地圖/地圖軟件

2019-08-28 15:48:37

Web緩存PWA
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

妞干网在线观看视频| 校园激情久久| 国产精品嫩草99av在线| 久久国产精品久久精品国产| 在线观看免费网站| 日韩电影免费看| 亚洲二区在线| 国产丝袜欧美中文另类| 中文字幕一区二区三区电影| 欧美理论一区二区| 黄页在线观看免费| 制服丝袜日韩| 亚洲精品国产第一综合99久久| 91av视频在线观看| 欧美变态视频| 久久精品综合| 欧美精品在线视频观看| 超碰超碰在线观看| 日韩不卡手机在线v区| 欧美在线短视频| 欧美在线www| 97视频久久久| jlzzjlzz亚洲女人| 国产亚洲一区二区精品| 婷婷福利视频导航| 日韩av在线免费观看不卡| 久久成人国产精品| 永久免费网站在线| 亚洲视频免费观看| 亚洲一区二区三区免费看| 国产a久久精品一区二区三区 | 真不卡电影网| 久久69国产一区二区蜜臀| 97在线看福利| 久久精品视频免费看| 亚洲精选视频免费看| 91制片厂免费观看| 午夜在线视频观看日韩17c| 欧美一级二级三级乱码| 美女精品视频一区| 超碰在线播放91| 国内精品偷拍| 日韩精品999| 涩涩涩久久久成人精品| 日韩免费av一区二区三区| 国产电影一区二区三区| 国产精品久久中文| 久久免费精品| 国产成人精品福利一区二区三区| 波多野结衣精品| 欧美日韩国产在线| 日本欧美在线| 四虎永久国产精品| 国产欧美日韩激情| 欧美电影网站| 亚洲精品视频一区二区| 国产在视频一区二区三区吞精| 久久久久中文字幕| 久久精品a一级国产免视看成人| 日本欧美在线看| 成人国产在线视频| 欧美日韩色图| 国产精品久久久久久影视| 久久久久九九精品影院| 久久精品美女视频网站| av电影在线观看| 亚洲午夜精品一区二区三区他趣| 亚洲社区在线| 亚洲 欧美综合在线网络| 国产毛片毛片| 欧美一二三在线| 91cn在线观看| 日韩电影免费观看中文字幕| av大片在线| 亚洲精品久久久一区二区三区 | 在线播放91灌醉迷j高跟美女| 国产免费福利| 在线欧美日韩精品| 成人国产精品一区二区免费麻豆 | 亚洲乱亚洲乱妇| 噜噜噜91成人网| 亚洲免费视频播放| 亚洲美女在线一区| 超碰在线caoporn| 日韩视频免费观看高清在线视频| 伊人免费在线| 中文字幕亚洲国产| 福利片一区二区| 欧美黄色一区二区| 国产成人精品电影久久久| 一区二区三区四区在线观看国产日韩| 青青草久久网络| 成人免费福利在线| 亚洲国产一区二区三区在线观看| h片在线观看网站| 久久99久久精品欧美| 久久99久久亚洲国产| 国产精品日本一区二区不卡视频| 青青草综合视频| 久久99久国产精品黄毛片入口| 精品成人av一区| 在线视频国产福利| 欧美日韩国产区| 国产盗摄精品一区二区酒店| 国产一区二区三区久久精品| 国产精品国产| 日本在线观看一区| 亚洲人成人一区二区在线观看 | 亚洲一区二区三区免费视频| 成人一级福利| 国产一区国产精品| 99精品欧美一区二区三区小说| 亚洲视频第二页| 夜夜嗨av色一区二区不卡| 911久久香蕉国产线看观看| 精品视频免费在线播放| 日韩写真欧美这视频| 欧美精品播放| 国产欧美精品aaaaaa片| www.亚洲色图| 久久先锋资源| 最近日韩中文字幕中文| 精品一区二区久久| av亚洲一区| 黄色国产精品视频| 国产伦理久久久| 高清欧美性猛交xxxx黑人猛交| 精品视频中文字幕| 另类图片国产| 亚洲一级淫片| 精品成人影院| 日本欧美黄色片| 偷拍日韩校园综合在线| 欧美色婷婷久久99精品红桃| 免费看涩涩视频| …久久精品99久久香蕉国产| 成人看片黄a免费看在线| 国产高潮在线| 热99在线观看| 大胆欧美人体视频| 亚洲欧美日韩高清在线| 日本三级视频在线观看| 精品无人乱码一区二区三区的优势| 色婷婷综合久久久久中文一区二区| 久久综合国产| 欧美xxxx黑人又粗又长| 超碰超碰超碰超碰超碰| 欧美激情视频在线观看| 偷拍与自拍一区| 久久97超碰色| 91精品尤物| 黑料吃瓜在线观看| 国产区二精品视| 国产视频精品xxxx| 亚洲欧美日韩久久精品| 国产传媒久久文化传媒| 9lporm自拍视频区在线| 日韩欧美在线观看强乱免费| 色综合久久久网| 国产在线日韩精品| 99在线播放| 高清在线视频不卡| 成人免费毛片嘿嘿连载视频…| 中文在线免费视频| 川上优的av在线一区二区| 国产成人在线免费看| 18性欧美xxxⅹ性满足| 亚洲人xxxx| 国产精品77777| 亚洲精品小区久久久久久| 亚洲国产一区二区三区高清| 波多野结衣亚洲一区| 欧美精品久久久久久久多人混战 | 国产精品大尺度| 天堂美国久久| 色婷婷成人网| 国产51人人成人人人人爽色哟哟| 男人草女人视频| 51国偷自产一区二区三区| 日韩午夜在线视频| 在线成人免费视频| 亚洲精品第一国产综合野| 国产99久久久久| 亚洲人成久久| 中文在线综合| 182在线播放| 桃子视频成人app| 日韩伦理在线一区| 国产在线色视频| 亚洲精品午夜| 国产激情视频在线观看| av免费高清观看| 日韩免费av电影| 曰本色欧美视频在线| 精品国产乱码久久久久久影片| 日韩精品中文字| 日韩日韩日韩日韩日韩| 丁香花在线影院| 激情av综合| 久久丝袜美腿综合|