在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++基礎(chǔ)知識(shí)之面向?qū)ο笃?

jf_78858299 ? 來(lái)源: 阿Q正磚 ? 作者: 阿Q ? 2023-03-02 09:49 ? 次閱讀

這兩期講完基本上面試遇到的相關(guān)問(wèn)題就過(guò)了一半了,后續(xù)將STL和內(nèi)存相關(guān)的補(bǔ)充完整,C++這塊的基本上就全部結(jié)束了,以后可能再也不會(huì)像現(xiàn)在這樣在這個(gè)方向投入過(guò)多時(shí)間,且行且珍惜啊,還是跟以前一樣,所有的總結(jié)都會(huì)有PDF版,如有需要自取。廢話不多說(shuō),發(fā)完這期,繼續(xù)整理STL去了。

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

  • 模板的意義:對(duì)類(lèi)型也可以進(jìn)行參數(shù)化了。
  • 函數(shù)模板 《= 是不進(jìn)行編譯的,因?yàn)轭?lèi)型不知道。
  • 模板的實(shí)例化 《= 函數(shù)調(diào)用點(diǎn)進(jìn)行實(shí)例化。
  • 模板函數(shù) 《= 才是被編譯器所編譯的。
  • 模板類(lèi)型參數(shù)。
  • 模板非類(lèi)型參數(shù)。
  • 模板的實(shí)參推演 =》 可以根據(jù)用戶傳入的實(shí)參的類(lèi)型,來(lái)推導(dǎo)模板類(lèi)型。
  • 模板的特例化。
  • 函數(shù)模板、模板的特例化、非模板函數(shù)的重載關(guān)系。
  • 模板代碼是不能在一個(gè)文件中定義,在另外一個(gè)文件中使用的。
  • 模板代碼調(diào)用之前,一定要看到模板定義的地方,這樣的話,模板才能夠進(jìn)行正常的實(shí)例化,產(chǎn)生能夠被編譯器編譯的代碼。
  • 所以,模板代碼都是放在頭文件當(dāng)中的,然后在源文件當(dāng)中直接進(jìn)行#includ包含。

2、泛型算法

  • 泛型算法參數(shù)接收的都是迭代器!
  • 泛型函數(shù) - 全局的函數(shù) - 給所有容器用的
  • 泛型函數(shù),有一套方式,,能夠統(tǒng)一的遍歷所有的容器的元素 - 迭代器。

3、拷貝賦值和移動(dòng)賦值

  1. 拷貝賦值是通過(guò)拷貝構(gòu)造函數(shù)來(lái)賦值,在創(chuàng)建對(duì)象時(shí),使用同一類(lèi)中之前創(chuàng)建的對(duì)象來(lái)初始化新創(chuàng)建的對(duì)象。
  2. 移動(dòng)賦值是通過(guò)移動(dòng)構(gòu)造函數(shù)來(lái)賦值,二者的主要區(qū)別在于:
  • 拷貝構(gòu)造函數(shù)的形參是一個(gè)左值引用,而移動(dòng)構(gòu)造函數(shù)的形參是一個(gè)右值引用。
  • 拷貝構(gòu)造函數(shù)完成的是整個(gè)對(duì)象或變量的拷貝,而移動(dòng)構(gòu)造函數(shù)是生成一個(gè)指針指向源對(duì)象或變量的地址,接管源對(duì)象的內(nèi)存,相對(duì)于大量數(shù)據(jù)的拷貝節(jié)省時(shí)間和內(nèi)存空間。

4、虛函數(shù)、靜態(tài)綁定、動(dòng)態(tài)綁定

虛函數(shù)表位于只讀數(shù)據(jù)段(.rodata) ,也就是C++內(nèi)存模型中的常量區(qū);而 虛函數(shù)則位于代碼段(.text) ,也就是C++內(nèi)存模型中的代碼區(qū)。

一個(gè)類(lèi)添加了虛函數(shù),對(duì)這個(gè)類(lèi)有什么影響?

  • 如果類(lèi)里面定義了虛函數(shù),那么編譯階段,編譯器給這個(gè)類(lèi)類(lèi)型產(chǎn)生一個(gè)唯一的vftable虛函數(shù)表,虛函數(shù)表中主要存儲(chǔ)的內(nèi)容就是RTTI指針和虛函數(shù)的地址。當(dāng)程序運(yùn)行時(shí),每一張?zhí)摫砗瘮?shù)都會(huì)加載到內(nèi)存的 .rodata區(qū)。
  • 一個(gè)類(lèi)里面定義了虛函數(shù),那么這個(gè)類(lèi)定義的對(duì)象,其運(yùn)行時(shí),內(nèi)存中開(kāi)始部分,多存儲(chǔ)一個(gè)vfptr虛函數(shù)指針,指向相應(yīng)類(lèi)型的虛函數(shù)表vftable。一個(gè)類(lèi)型定義的n個(gè)對(duì)象,它們的vfptr指向的都是同一張?zhí)摵瘮?shù)表。
  • 一個(gè)類(lèi)里面虛函數(shù)的個(gè)數(shù),不影響對(duì)象內(nèi)存大小(vfptr),影響的是虛函數(shù)表的大小
  • 如果派生類(lèi)中的方法,和基類(lèi)繼承來(lái)的某個(gè)方法,返回值、函數(shù)名、參數(shù)列表都相同,而且基類(lèi)的方法是virtual虛函數(shù),那么派生類(lèi)的這個(gè)方法,自動(dòng)處理成虛函數(shù)。

靜態(tài)綁定和動(dòng)態(tài)綁定:綁定指的是函數(shù)調(diào)用

  • 靜態(tài)綁定在編譯時(shí)期,綁定的是普通函數(shù)的調(diào)用 指令 :call Base::show(地址)
  • 動(dòng)態(tài)綁定在運(yùn)行時(shí)期,綁定的一定是虛函數(shù)的調(diào)用 指令:編譯的是call寄存器 運(yùn)行時(shí)才知道

覆蓋:基類(lèi)和派生類(lèi)的方法,返回值、函數(shù)名以及參數(shù)列表都相同,而且基類(lèi)的方法是虛函數(shù),那么派生類(lèi)的方法就是自動(dòng)處理成虛函數(shù),他們之間成為覆蓋關(guān)系。

在類(lèi)內(nèi)部添加一個(gè)虛擬函數(shù)表指針,該指針指向一個(gè)虛擬函數(shù)表,該虛擬函數(shù)表包含了所有的虛擬函數(shù)的入口地址,每個(gè)類(lèi)的虛擬函數(shù)表都不一樣,在運(yùn)行階段可以循環(huán)脈絡(luò)找到自己的函數(shù)入口。純虛函數(shù)相當(dāng)于占位符,現(xiàn)在虛函數(shù)占一個(gè)位置由派生類(lèi)實(shí)現(xiàn)后再把真正的函數(shù)指針填進(jìn)去。

5、虛析構(gòu)函數(shù)

  1. 哪些函數(shù)不能實(shí)現(xiàn)成虛函數(shù)?

虛函數(shù)依賴(lài):

  • 虛函數(shù)能產(chǎn)生地址,存儲(chǔ)在vfptr當(dāng)中
  • 對(duì)象必須存在(vfptr -> vftable -> 虛函數(shù)地址)

構(gòu)造函數(shù):沒(méi)有虛構(gòu)造函數(shù)!!!

  • virtual+構(gòu)造函數(shù) NO!
  • 構(gòu)造函數(shù)中(調(diào)用的任何函數(shù),都是靜態(tài)綁定的)調(diào)用虛函數(shù),也不會(huì)發(fā)生靜態(tài)綁定

派生類(lèi)對(duì)象構(gòu)造過(guò)程:先調(diào)用的是基類(lèi)的構(gòu)造函數(shù),才調(diào)用派生類(lèi)的構(gòu)造函數(shù)。

static靜態(tài)成員方法 NO!

  1. 虛析構(gòu)函數(shù) 析構(gòu)函數(shù)調(diào)用的時(shí)候,對(duì)象是存在的!
  2. 什么時(shí)候把基類(lèi)的析構(gòu)函數(shù)必須實(shí)現(xiàn)成虛函數(shù)?

基類(lèi)的指針(引用)指向堆上new出來(lái)的派生來(lái)對(duì)象的時(shí)候,delete pb(基類(lèi)指針),它調(diào)用析構(gòu)函數(shù)的時(shí)候,必須發(fā)生動(dòng)態(tài)綁定,否則會(huì)導(dǎo)致派生類(lèi)的析構(gòu)函數(shù)無(wú)法調(diào)用

  1. 虛函數(shù)和動(dòng)態(tài)綁定

問(wèn)題:是不是虛函數(shù)的調(diào)用一定就是動(dòng)態(tài)綁定?肯定不是!

在類(lèi)的構(gòu)造函數(shù)當(dāng)中,調(diào)用虛函數(shù),也是靜態(tài)綁定(構(gòu)造函數(shù)中調(diào)用其他函數(shù)(虛),不會(huì)發(fā)生動(dòng)態(tài)綁定)

靜態(tài)綁定 用對(duì)象本身調(diào)用虛函數(shù),是靜態(tài)綁定

動(dòng)態(tài)綁定:

  • 必須由指針調(diào)用虛函數(shù)
  • 必須由引用變量調(diào)用虛函數(shù)
  • 虛函數(shù)通過(guò)指針或者引用的調(diào)用,才發(fā)生動(dòng)態(tài)綁定

6、如何解釋多態(tài)

  1. 靜態(tài)(編譯時(shí)期)的多態(tài):函數(shù)重載、模板(函數(shù)模板和類(lèi)模板)

    
    
    bool compare(int , int) { }
    bool cpmpare(double, double) { }
    compare(10,20); call compare_int_int  在編譯階段就確定好調(diào)用的函數(shù)版本
    compare(10.5, 20.5); call compare_double_double  在編譯階段就確定好調(diào)用的函數(shù)版本
    template<typename T>
    bool compare(T a, T b) { }
    compare<int>(10,20);  => int   實(shí)例化一個(gè)compare<int>
    compare(10.5 ,20.5);  => double  實(shí)例化一個(gè) compare<double>
    
    
    
  2. 動(dòng)態(tài)(運(yùn)行時(shí)期)的多態(tài):

在繼承結(jié)構(gòu)中,基類(lèi)指針(引用)指向派生類(lèi)對(duì)象,通過(guò)指針(引用)調(diào)用同名覆蓋方法(虛函數(shù)),基類(lèi)指針指向哪個(gè)派生類(lèi)對(duì)象,就會(huì)調(diào)用哪個(gè)派生類(lèi)對(duì)象的同名覆蓋方法,稱(chēng)為多態(tài)。

pbase->show();

多態(tài)底層是通過(guò)動(dòng)態(tài)綁定來(lái)實(shí)現(xiàn)的,pbase->訪問(wèn)誰(shuí)的vfptr ->繼續(xù)訪問(wèn)誰(shuí)的vftable -> 當(dāng)然調(diào)用的是對(duì)應(yīng)的派生類(lèi)對(duì)象的方法了。

7、繼承

廣義的繼承有三種實(shí)現(xiàn)形式:

  1. 實(shí)現(xiàn)繼承:指使用基類(lèi)的屬性和方法而無(wú)需額外編碼的能力。
  2. 可視繼承:子窗口使用父窗口的外觀和實(shí)現(xiàn)代碼。
  3. 接口繼承:僅使用屬性和方法,實(shí)現(xiàn)滯后到子類(lèi)

好處:

  • 可以做代碼的復(fù)用
  • 在基類(lèi)中給所有派生類(lèi)提供統(tǒng)一的虛函數(shù)接口,讓派生類(lèi)重寫(xiě),然后就可以使用多態(tài)了。

8、抽象類(lèi)和普通類(lèi)的區(qū)別

一般把什么類(lèi)設(shè)計(jì)成抽象類(lèi)?基類(lèi)

//動(dòng)物的基類(lèi) 泛指 類(lèi) -> 抽象一個(gè)實(shí)體的類(lèi)型

定義Animal的初衷,并不是讓Animal抽象某個(gè)實(shí)體的類(lèi)型

  • string _name; 讓所有的動(dòng)物實(shí)體類(lèi)通過(guò)繼承Animal直接復(fù)用該屬性
  • 給所有的派生類(lèi)保留統(tǒng)一的覆蓋/重寫(xiě)接口

擁有純虛函數(shù)的類(lèi),叫抽象類(lèi)!(Animal)

Animal a; NO!!!

抽象類(lèi)不能再實(shí)例化對(duì)象了,但是可以定義指針和引用變量。

class Animal
{
public:
    Animal(string name) : _name(name) { }
    virtual void bark() = 0; //純虛函數(shù)
protected:
    string _name;
};
//以下是動(dòng)物實(shí)體類(lèi)
class Cat : public Animal
{
public:
    Cat(string name) : Animal(name) { }
    void bark() { cout << _name << "bark: miao miao!" << endl; }
};
class Dog :public Animal
{
public:
    Dog(string name):Animal(name) { }
    void bark() { cout << _name << "bark: wang wang!" << endl; }
};
class Pig :public Animal
{
    Pig(string name) :Animal(name) {        }
    void bark() { cout << _name << "bark: heng heng! " << endl; }
};
void bark(Animal* p)
{
    p->bark(); //Animal::bark虛函數(shù),動(dòng)態(tài)綁定了
}
int main()
{
    Cat cat("貓咪");
    Dog dog("二哈");
    Pig pig("佩奇");

    bark(&cat);
    bark(&dog);
    bark(&pig);


    return 0;
}

9、抽象類(lèi)(有純虛函數(shù)的類(lèi)) / 虛基類(lèi)

virtual

  • 修飾成員方法的虛函數(shù)
  • 可以修飾繼承方式,是虛繼承。被虛繼承的類(lèi),稱(chēng)作虛基類(lèi)。
class A
{
public:
    virtual void func() { cout << "call A::func" << endl; }
    void operator delete(void* ptr)
{
        cout << "operator delete p:" << ptr << endl;
        free(ptr);
    }
private:
    int ma;
};
class B :virtual public A
{
public:
    void func() { cout << "call B::func" << endl; }
    void* operator new(size_t size)
{
        void* p = malloc(size);
        cout << "operator new p:" << p << endl;
        return p;
    }
private:
    int mb;
};


A a; 4個(gè)字節(jié)
B b; ma,mb  8個(gè)字節(jié)


int main()
{
    B b;
    A* p = &b;
    cout << "main p:" << p << endl;
    p->func();
    return 0;
}

基類(lèi)指針指向派生類(lèi)對(duì)象,永遠(yuǎn)指向的是派生類(lèi)基類(lèi)部分?jǐn)?shù)據(jù)的起始地址。

10、C++多繼承

菱形繼承的問(wèn)題:派生類(lèi)有多份間接基類(lèi)的數(shù)據(jù), 設(shè)計(jì)的問(wèn)題

使用虛繼承

好處 :可以做更多代碼的復(fù)用。

C++語(yǔ)言級(jí)別提供的四種類(lèi)型轉(zhuǎn)換方式:

  • const_cast:去掉常量屬性的一個(gè)類(lèi)型轉(zhuǎn)換。
  • static_cast:提供編譯器認(rèn)為安全的類(lèi)型轉(zhuǎn)換(沒(méi)有任何聯(lián)系的類(lèi)型之間的轉(zhuǎn)換就被否定)。
  • reinterpret_cast:類(lèi)似于C風(fēng)格的強(qiáng)制類(lèi)型轉(zhuǎn)換。
  • dynamic_cast:主要用于在繼承結(jié)構(gòu)中,可以支持RTTI類(lèi)型識(shí)別的上下轉(zhuǎn)換。

11、函數(shù)對(duì)象

把有operator() 小括號(hào)運(yùn)算符重載函數(shù)的對(duì)象,稱(chēng)作函數(shù)對(duì)象或者仿函數(shù)。

  • 通過(guò)函數(shù)對(duì)象調(diào)用operator(),可以省略函數(shù)的調(diào)用開(kāi)銷(xiāo),比通過(guò)函數(shù)指針調(diào)用函數(shù)(不能夠inline內(nèi)聯(lián)調(diào)用)效率高。
  • 因?yàn)楹瘮?shù)對(duì)象是用類(lèi)生成的,所以可以添加相關(guān)的成員變量,用來(lái)記錄函數(shù)對(duì)象使用時(shí)的信息
//函數(shù)對(duì)象
template

12、菱形繼承

多重繼承-菱形繼承的問(wèn)題:

  • 好處:可以做更多代碼的復(fù)用。

基類(lèi)被多個(gè)派生類(lèi)用就需要是虛繼承,不然就會(huì)報(bào)錯(cuò)。

基類(lèi)需要被最后的派生類(lèi)初始化。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Labview 之面向對(duì)象編程。 里面有個(gè)例子 和視頻教程地址

    Labview 之面向對(duì)象編程。 里面有個(gè)例子 和視頻教程地址Labview 之面向對(duì)象編程。 里面有個(gè)例子 和視頻教程地址
    發(fā)表于 12-29 10:16

    C++ 面向對(duì)象多線程編程下載

    C++ 面向對(duì)象多線程編程下載
    發(fā)表于 04-08 02:14 ?70次下載

    C++語(yǔ)言基礎(chǔ)知識(shí)講解

    C++語(yǔ)言基礎(chǔ)知識(shí)講解,喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-14 15:30 ?22次下載

    面向對(duì)象的程序設(shè)計(jì)(C++

    面向對(duì)象的程序設(shè)計(jì)(C++).面向對(duì)象的基本思想 C++對(duì)
    發(fā)表于 03-22 14:40 ?0次下載

    C#入門(mén)教程之面向對(duì)象編程簡(jiǎn)介的詳細(xì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是C#入門(mén)教程之面向對(duì)象編程簡(jiǎn)介的詳細(xì)資料概述主要學(xué)習(xí)的目標(biāo)是1.面向對(duì)象
    發(fā)表于 12-05 11:54 ?35次下載
    <b class='flag-5'>C</b>#入門(mén)教程<b class='flag-5'>之面向</b><b class='flag-5'>對(duì)象</b>編程簡(jiǎn)介的詳細(xì)資料概述

    Visual C++教程之C++基礎(chǔ)知識(shí)介紹

    本文檔的主要內(nèi)容詳細(xì)介紹的是Visual C++教程之C++基礎(chǔ)知識(shí)介紹主要內(nèi)容包括了:1 類(lèi)和對(duì)象,2 類(lèi)的成員及特性,3 繼承和派生類(lèi)
    發(fā)表于 02-15 15:59 ?9次下載
    Visual <b class='flag-5'>C++</b>教程之<b class='flag-5'>C++</b>的<b class='flag-5'>基礎(chǔ)知識(shí)</b>介紹

    C++語(yǔ)言和面向對(duì)象程序設(shè)計(jì)教程

    C++語(yǔ)言和面向對(duì)象程序設(shè)計(jì)代表了旨在使計(jì)算機(jī)問(wèn)題解更加符合人的思維活動(dòng),是軟件開(kāi)發(fā)方法的一場(chǎng)革命;面向對(duì)象建模和
    發(fā)表于 03-02 08:00 ?6次下載

    C/C++基礎(chǔ)知識(shí)匯總

    這是一五萬(wàn)字的C/C++知識(shí)點(diǎn)總結(jié),包括答案。
    的頭像 發(fā)表于 06-12 15:10 ?2495次閱讀

    C++基礎(chǔ)知識(shí)

    C++基礎(chǔ)知識(shí)
    的頭像 發(fā)表于 01-12 11:00 ?1464次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>基礎(chǔ)知識(shí)</b>

    C++基礎(chǔ)知識(shí)之面向對(duì)象2

    這兩期講完基本上面試遇到的相關(guān)問(wèn)題就過(guò)了一半了,后續(xù)將STL和內(nèi)存相關(guān)的補(bǔ)充完整,C++這塊的基本上就全部結(jié)束了,以后可能再也不會(huì)像現(xiàn)在這樣在這個(gè)方向投入過(guò)多時(shí)間,且行且珍惜啊,還是跟以前一樣,所有的總結(jié)都會(huì)有PDF版,如有需要自取。廢話不多說(shuō),發(fā)完這期,繼續(xù)整理STL去了。
    的頭像 發(fā)表于 03-02 09:53 ?449次閱讀

    C/C++之面向對(duì)象編程思想1

    C++作為一門(mén)在C和Java之間的語(yǔ)言,其既可以使用C語(yǔ)言中的高效指針,又繼承了Java中的面向對(duì)象編程思想,在去年編程語(yǔ)言排行榜上更是首次
    的頭像 發(fā)表于 03-30 15:14 ?689次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>之面向</b><b class='flag-5'>對(duì)象</b>編程思想<b class='flag-5'>1</b>

    C/C++之面向對(duì)象編程思想2

    C++作為一門(mén)在C和Java之間的語(yǔ)言,其既可以使用C語(yǔ)言中的高效指針,又繼承了Java中的面向對(duì)象編程思想,在去年編程語(yǔ)言排行榜上更是首次
    的頭像 發(fā)表于 03-30 15:14 ?618次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>之面向</b><b class='flag-5'>對(duì)象</b>編程思想2

    C/C++之面向對(duì)象編程思想3

    C++作為一門(mén)在C和Java之間的語(yǔ)言,其既可以使用C語(yǔ)言中的高效指針,又繼承了Java中的面向對(duì)象編程思想,在去年編程語(yǔ)言排行榜上更是首次
    的頭像 發(fā)表于 03-30 15:16 ?613次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>之面向</b><b class='flag-5'>對(duì)象</b>編程思想3

    PyTorch教程3.2之面向對(duì)象的設(shè)計(jì)實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程3.2之面向對(duì)象的設(shè)計(jì)實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 06-05 15:48 ?0次下載
    PyTorch教程3.2<b class='flag-5'>之面向</b><b class='flag-5'>對(duì)象</b>的設(shè)計(jì)實(shí)現(xiàn)

    C++語(yǔ)言基礎(chǔ)知識(shí)

    電子發(fā)燒友網(wǎng)站提供《C++語(yǔ)言基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
    發(fā)表于 07-19 10:58 ?8次下載
    主站蜘蛛池模板: 欧洲性freefree大白屁股 | 在线黄色网 | 91极品女神嫩模在线播放 | 黄 色 免费网 站 成 人 | 一级毛片 在线播放 | 99久久久久久久 | 日本高清免费aaaaa大片视频 | 三级完整在线观看高清视频 | 色中涩| 亚洲理论在线观看 | 欧美草逼| 奇米色影院 | 免费看美女的逼 | 青草99 | 亚洲色图22p| 日本一区不卡视频 | 日本三级全黄三级a | 好骚综合在线 | 免费被视频网站在线观看 | 免费看黄色一级毛片 | 四虎影视最新 | xx视频在线 | 美女和帅哥在床上玩的不可描述 | a黄网站 | 狠狠干狠狠色 | 欧美成人h精品网站 | 亚洲伊人久久网 | 久久精品久久久久 | 欧美午夜片 | 国产性老妇女做爰在线 | 黄色午夜| 免费视频一区二区性色 | 可以直接看的黄址 | 亚洲日韩色综合视频 | 男女爱爱视频免费看 | 日日添天天做天天爱 | 中文天堂最新版www官网在线 | 男男h文小说阅 | 在线播放国产一区 | 精品国产自在在线在线观看 | 日本黄色高清视频 |