久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

VC類定義

時間:2019-05-12 20:33:34下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《VC類定義》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《VC類定義》。

第一篇:VC類定義

VC++怎樣定義類對象

如果你定義了一個類(假設是A)那么聲明一個A的對象的方法就是:

A a;// a 就是一個A的對象

A *a;// a 就是一個A的對象的指針

A a[N];// a 就是一個A的對象的數組

A fuctionName();// 返回A的一個對象的函數

上面是說如何定義對象,下面說如何定義一個類

最基本的:(運用關鍵字class)

class A{

public://公有變量及函數(沒聲明是public,private,protected的都默認為public,這個與Java是不同的,后者默認為protected)(可以在任意位置被訪問)

......private://私有變量及函數(只能在類里面被訪問)

......protecte://受保護的變量及函數(可以在派生類中被訪問)

};//注意分號

一般構造函數,析構函數,復制構造函數都是在public里被聲明的(不用我說什么是構造函數(construct)和什么是析構函數(destruct)了吧)。

更往深一層會有派生類,友元類,抽象類的概念。

派生類就是有一個已經存在的類來derive一個新的類,一般新的類跟原來的是被包含與包含的關系(否則聲明一個派生類就沒什么意義)具體實現如下:

class A: public B{

......//跟一個普通的類沒什么區別

}

聲明一個友元類是這樣的:

class A: {

friend B

......}(A就成了B的友元類,友元函數的聲明也類似)

不過要注意到,友元函數、友元類的大量使用破壞了類里的數據及函數的穩定性,或是可靠性。使得private類型的都可能被篡改。

最后抽象類:

它是通過虛函數來實現的,所謂虛函數就是加上virtual關鍵字在前面的函數;含有虛函數的類就是抽象類,注意到如果要實現一個函數的動態綁定對象必須要以地址的形式來傳遞。好吧,短短幾句是不能把聲明類的注意事項說清楚的,太多了(像什么封裝,繼承,抽象)。不過,你只要多編寫多看書就會的。

第二篇:定義銀行類

在定義銀行類時,若取錢數大于余額則作為異常處理(InsufficientFundsException).思路:產生異常的條件是余額少于取額, 因此是否拋出異常要判斷條件

取錢是withdrawal([wie'dr?:?l, wiθ-]n.撤退,收回;提款;取消;退股)方法中定義的動作,因此在該方法中產生異常.處理異常安排在調用withdrawal的時候,因此withdrawal方法要聲明異常,由上級方法調用 要定義好自己的異常類class Bank

{double balance;

public void deposite(double dAmount)

{if(dAmount>0.0){balance+=dAmount;}}

public void withdrawal(double dAmount)

throws InsufficientFundsException{if(balance

throw new InsufficientFundsException(this,dAmount);}

balance=balance-dAmount;

}

public void show_balance()

{ System.out.println(“The balance is ”+(int)balance);}

}

public class ExceptionDemo

{ public static void main(String args[])

{ try

{ Bank ba=new Bank(50);

ba.withdrawal(100);

System.out.println(“Withdrawal successful!”);

}catch(Exception e)

{System.out.println(e.toString());}

}public class InsufficientFundsException extends Exception{private Bankexcepbank;

private double excepAmount;

InsufficientFundsException(Bank ba, doubledAmount){ excepbank=ba;

excepAmount=dAmount;

}

public StringexcepMesagge()

{String str=“The balance”+ excepbank.showBalance()+“The withdrawal was”+excepAmount;return str;}

第三篇:類聲明和定義

如何組織編寫模板程序 前言

常遇到詢問使用模板到底是否容易的問題,我的回答是:“模板的使用是容易的,但組織編寫卻不容易”。看看我們幾乎每天都能遇到的模板類吧,如STL, ATL, WTL, 以及Boost的模板類,都能體會到這樣的滋味:接口簡單,操作復雜。

我在5年前開始使用模板,那時我看到了MFC的容器類。直到去年我還沒有必要自己編寫模板類。可是在我需要自己編寫模板類時,我首先遇到的事實卻是“傳統”編程方法(在*.h文件聲明,在*.cpp文件中定義)不能用于模板。于是我花費一些時間來了解問題所在及其解決方法。

本文對象是那些熟悉模板但還沒有很多編寫模板經驗的程序員。本文只涉及模板類,未涉及模板函數。但論述的原則對于二者是一樣的。

問題的產生

通過下例來說明問題。例如在array.h文件中有模板類array: // array.h template class array { T data_[SIZE];array(const array& other);const array& operator =(const array& other);public: array(){};T& operator[](int i){return data_[i];} const T& get_elem(int i)const {return data_[i];} void set_elem(int i, const T& value){data_[i] = value;} operator T*(){return data_;} };

然后在main.cpp文件中的主函數中使用上述模板: // main.cpp #include “array.h” int main(void){ array intArray;intArray.set_elem(0, 2);int firstElem = intArray.get_elem(0);int* begin = intArray;} 這時編譯和運行都是正常的。程序先創建一個含有50個整數的數組,然后設置數組的第一個元素值為2,再讀取第一個元素值,最后將指針指向數組起點。但如果用傳統編程方式來編寫會發生什么事呢?我們來看看:

將array.h文件分裂成為array.h和array.cpp二個文件(main.cpp保持不變)// array.h template class array { T data_[SIZE];array(const array& other);const array& operator =(const array& other);public: array(){};T& operator[](int i);const T& get_elem(int i)const;void set_elem(int i, const T& value);operator T*();};

// array.cpp #include “array.h” template T& array::operator [](int i){ return data_[i];} template const T& array::get_elem(int i)const { return data_[i];} template void array::set_elem(int i, const T& value){ data_[i] = value;} template array::operator T*(){ return data_;}

編譯時會出現3個錯誤。問題出來了: 為什么錯誤都出現在第一個地方? 為什么只有3個鏈接出錯?array.cpp中有4個成員函數。

要回答上面的問題,就要深入了解模板的實例化過程。模板實例化

程序員在使用模板類時最常犯的錯誤是將模板類視為某種數據類型。所謂類型參量化(parameterized types)這樣的術語導致了這種誤解。模板當然不是數據類型,模板就是模板,恰如其名:

編譯器使用模板,通過更換模板參數來創建數據類型。這個過程就是模板實例化(Instantiation)。

從模板類創建得到的類型稱之為特例(specialization)。

模板實例化取決于編譯器能夠找到可用代碼來創建特例(稱之為實例化要素,point of instantiation)。

要創建特例,編譯器不但要看到模板的聲明,還要看到模板的定義。模板實例化過程是遲鈍的,即只能用函數的定義來實現實例化。

再回頭看上面的例子,可以知道array是一個模板,array是一個模板實例-一個類型。從array創建array的過程就是實例化過程。實例化要素體現在main.cpp文件中。如果按照傳統方式,編譯器在array.h文件中看到了模板的聲明,但沒有模板的定義,這樣編譯器就不能創建類型array。但這時并不出錯,因為編譯器認為模板定義在其它文件中,就把問題留給鏈接程序處理。

現在,編譯array.cpp時會發生什么問題呢?編譯器可以解析模板定義并檢查語法,但不能生成成員函數的代碼。它無法生成代碼,因為要生成代碼,需要知道模板參數,即需要一個類型,而不是模板本身。

這樣,鏈接程序在main.cpp 或 array.cpp中都找不到array的定義,于是報出無定義成員的錯誤。

至此,我們回答了第一個問題。但還有第二個問題,在array.cpp中有4個成員函數,鏈接器為什么只報了3個錯誤?回答是:實例化的惰性導致這種現象。在main.cpp中還沒有用上operator[],編譯器還沒有實例化它的定義。解決方法

認識了問題,就能夠解決問題:

在實例化要素中讓編譯器看到模板定義。

用另外的文件來顯式地實例化類型,這樣鏈接器就能看到該類型。使用export關鍵字。

前二種方法通常稱為包含模式,第三種方法則稱為分離模式。

第一種方法意味著在使用模板的轉換文件中不但要包含模板聲明文件,還要包含模板定義文件。在上例中,就是第一個示例,在array.h中用行內函數定義了所有的成員函數。或者在main.cpp文件中也包含進array.cpp文件。這樣編譯器就能看到模板的聲明和定義,并由此生成array實例。這樣做的缺點是編譯文件會變得很大,顯然要降低編譯和鏈接速度。

第二種方法,通過顯式的模板實例化得到類型。最好將所有的顯式實例化過程安放在另外的文件中。在本例中,可以創建一個新文件templateinstantiations.cpp: // templateinstantiations.cpp #include “array.cpp” template class array ;// 顯式實例化

array類型不是在main.cpp中產生,而是在templateinstantiations.cpp中產生。這樣鏈接器就能夠找到它的定義。用這種方法,不會產生巨大的頭文件,加快編譯速度。而且頭文件本身也顯得更加“干凈”和更具有可讀性。但這個方法不能得到惰性實例化的好處,即它將顯式地生成所有的成員函數。另外還要維護templateinstantiations.cpp文件。第三種方法是在模板定義中使用export關鍵字,剩下的事就讓編譯器去自行處理了。當我在

Stroustrup的書中讀到export時,感到非常興奮。但很快就發現VC 6.0不支持它,后來又發現根本沒有編譯器能夠支持這個關鍵字(第一個支持它的編譯器要在2002年底才問世)。自那以后,我閱讀了不少關于export的文章,了解到它幾乎不能解決用包含模式能夠解決的問題。欲知更多的export關鍵字,建議讀讀Herb Sutter撰寫的文章。

結論

要開發模板庫,就要知道模板類不是所謂的“原始類型”,要用其它的編程思路。本文目的不是要嚇唬那些想進行模板編程的程序員。恰恰相反,是要提醒他們避免犯下開始模板編程時都會出現的錯誤。

////////////////////////////// http://www.tmdps.cn,.cxx)擴展名。

這種組織方式工作的很好:它使得在編程時可以方便地訪問所需的類型定義,并且避免了來自鏈接器的“變量或函數重復定義”的錯誤。

由于以上組織方式約定的影響,模板編程新手往往會犯一個同樣的錯誤。下面這一小段程序反映了這種錯誤。就像對待“普通代碼”那樣,我們在頭文件中定義模板: // basics/myfirst.hpp #ifndef MYFIRST_HPP #define MYFIRST_HPP // declaration of template template void print_typeof(T const&);#endif // MYFIRST_HPP print_typeof()聲明了一個簡單的輔助函數用來打印一些類型信息。函數的定義放在點C文件中:

// basics/myfirst.cpp #include #include #include “myfirst.hpp” // implementation/definition of template template void print_typeof(T const& x){ std::cout << typeid(x).name()<< std::endl;} 這個例子使用typeid操作符來打印一個字符串,這個字符串描述了傳入的參數的類型信息。最后,我們在另外一個點C文件中使用我們的模板,在這個文件中模板聲明被#include: // basics/myfirstmain.cpp #include “myfirst.hpp” // use of the template int main(){ double ice = 3.0;print_typeof(ice);// call function template for type double }

大部分C++編譯器(Compiler)很可能會接受這個程序,沒有任何問題,但是鏈接器(Linker)大概會報告一個錯誤,指出缺少函數print_typeof()的定義。

這個錯誤的原因在于,模板函數print_typeof()的定義還沒有被具現化(instantiate)。為了具現化一個模板,編譯器必須知道哪一個定義應該被具現化,以及使用什么樣的模板參數來具現化。不幸的是,在前面的例子中,這兩組信息存在于分開編譯的不同文件中。因此,當我們的編譯器看到對print_typeof()的調用,但是沒有看到此函數為double類型具現化的定義時,它只是假設這樣的定義在別處提供,并且創建一個那個定義的引用(鏈接器使用此引用解析)。另一方面,當編譯器處理myfirst.cpp時,該文件并沒有任何指示表明它必須為它所包含的特殊參數具現化模板定義。頭文件中的模板

解決上面這個問題的通用解法是,采用與我們使用宏或者內聯函數相同的方法:我們將模板的定義包含進聲明模板的頭文件中。對于我們的例子,我們可以通過將#include “myfirst.cpp”添加到myfirst.hpp文件尾部,或者在每一個使用我們的模板的點C文件中包含myfirst.cpp文件,來達到目的。當然,還有第三種方法,就是刪掉myfirst.cpp文件,并重寫myfirst.hpp文件,使它包含所有的模板聲明與定義:

// basics/myfirst2.hpp #ifndef MYFIRST_HPP #define MYFIRST_HPP #include #include // declaration of template template void print_typeof(T const&);// implementation/definition of template template void print_typeof(T const& x){ std::cout << typeid(x).name()<< std::endl;} #endif // MYFIRST_HPP 這種組織模板代碼的方式就稱作包含模式。經過這樣的調整,你會發現我們的程序已經能夠正確編譯、鏈接、執行了。

從這個方法中我們可以得到一些觀察結果。最值得注意的一點是,這個方法在相當程度上增加了包含myfirst.hpp的開銷。在這個例子中,這種開銷并不是由模板定義自身的尺寸引起的,而是由這樣一個事實引起的,即我們必須包含我們的模板用到的頭文件,在這個例子中是。你會發現這最終導致了成千上萬行的代碼,因為諸如這樣的頭文件也包含了和我們類似的模板定義。

這在實踐中確實是一個問題,因為它增加了編譯器在編譯一個實際程序時所需的時間。我們因此會在以后的章節中驗證其他一些可能的方法來解決這個問題。但無論如何,現實世界中的程序花一小時來編譯鏈接已經是快的了(我們曾經遇到過花費數天時間來從源碼編譯的程序)。

拋開編譯時間不談,我們強烈建議如果可能盡量按照包含模式組織模板代碼。

另一個觀察結果是,非內聯模板函數與內聯函數和宏的最重要的不同在于:它并不會在調用端展開。相反,當模板函數被具現化時,會產生此函數的一個新的拷貝。由于這是一個自動的過程,編譯器也許會在不同的文件中產生兩個相同的拷貝,從而引起鏈接器報告一個錯誤。理論上,我們并不關心這一點:這是編譯器設計者應當關心的事情。實際上,大多數時候一切都運轉正常,我們根本就不用處理這種狀況。然而,對于那些需要創建自己的庫的大型項目,這個問題偶爾會顯現出來。

最后,需要指出的是,在我們的例子中,應用于普通模板函數的方法同樣適用于模板類的成員函數和靜態數據成員,以及模板成員函數。

第四篇:二叉樹的類定義

實驗一、二叉樹的類定義

程序說明

1、改程序用二叉鏈存儲結構將其生成一棵二叉樹;

2、分別用三種遍歷算法將二叉樹的遍歷序列輸出;

3、用括號表示法輸出二叉樹。

二叉樹的形狀

A

程序代碼

#include “stdafx.h” #include using std::cin;using std::cout;using std::endl;using namespace std;typedef struct CZYP_BTNode {

char data;

struct CZYP_BTNode *left;

//左孩子指針

struct CZYP_BTNode *right;// 右孩子指針

} *BiTree;

void CreateBiTree(BiTree &T){

// 在先序遍歷二叉樹的過程中輸入二叉樹的“先序字符串”,// 建立根指針為 T的二叉鏈表存儲結構。在先序字符串中,// 字符'#'表示空樹,其它字母字符為結點的數據元素

char ch;

cin >> ch;

if(ch=='#')

{

T=NULL;// 建空樹

} else {

T = new CZYP_BTNode;

// “訪問”操作為生成根結點

T->data = ch;

CreateBiTree(T->left);

// 遞歸建(遍歷)左子樹

CreateBiTree(T->right);

// 遞歸建(遍歷)右子樹

}

}

//先序遍歷以T為根指針的二叉樹 void PreOrder(BiTree &T){

if(T)

{

// T=NULL時,二叉樹為空樹,不做任何操作

cout<< T->data << “ ”;// 通過函數指針 *visit 訪問根結點

PreOrder(T->left);

// 先序遍歷左子樹

PreOrder(T->right);

// 先序遍歷右子樹

} }

//中序遍歷以T為根指針的二叉樹 void InOrder(BiTree &T){

if(T){

// T=NULL時,二叉樹為空樹,不做任何操作

InOrder(T->left);// 先序遍歷左子樹

cout<< T->data << “ ”;// 通過函數指針 *visit 訪問根結點

InOrder(T->right);// 先序遍歷右子樹

} } //后序遍歷以T為根指針的二叉樹 void PostOrder(BiTree &T){

if(T){

// T=NULL時,二叉樹為空樹,不做任何操作

PostOrder(T->left);// 先序遍歷左子樹

PostOrder(T->right);// 先序遍歷右子樹

cout<< T->data << “ ”;// 通過函數指針 *visit 訪問根結點

} } //用括號表示法輸出二叉樹 void DispBTree(BiTree &bt){ if(bt!=NULL){

cout<data;

if(bt->right!=NULL||bt->left!=NULL)

{

cout<<“(”;程序結果

DispBTree(bt->left);

if(bt->right!=NULL)cout<<“,”;

DispBTree(bt->right);

cout<<“)”;

} } }

int main(){

cout << “請依次輸入字符: ABD#G##E##C#FH###” << endl;

BiTree T;

CreateBiTree(T);

cout << “先序遍歷: ” << endl;

PreOrder(T);

cout << endl << “中序遍歷: ” << endl;

InOrder(T);

cout << endl << “后序遍歷: ” << endl;

PostOrder(T);

cout<<“n用括號表示法輸出二叉樹:n”;DispBTree(T);cout<

return(0);}

心得體會

在這次實驗中,我花了很多的時間。最重要的體會就是我的知識卻是很少。在做這次試驗之前我仔細的看了一遍樹的三種遍歷的偽代碼。對程序中用到的遞歸思想有了更深刻的認識,并且我也借鑒了老師PPT上的很多程序的寫法。再者就是我從網上找了一些二叉樹的寫法,然后通過自己修改、調試。在這里我想說一下,我調試的時候很多錯誤都不知道從哪里找,后來我就把出現的錯誤信息輸入到baidu里,事實證明這樣確實很有效。終于沒有錯誤了。Happy!!

今天調試了一上午,雖說很累,但是我確確實實感到學到了很多知識。不足之處

這個程序的int isEmpty()函數沒有實現,需要改天寫出來。

一、給定二叉樹如下圖所示,編程完成下列要求:

1、用二叉鏈存儲結構將其生成一棵二叉樹;

2、分別用三種遍歷算法將二叉樹的遍歷序列輸出;

3、用括號表示法輸出二叉樹。G D B E A

C F H 上面是個圖。。由于我分不多了,所以不是很多。但是我很想學這方面知識,到時我有分了再給你叫啊。高手幫忙啊。問題補充:

我把圖詳細說下。A是樹根;B、C分別是A的左右孩子;D、E分別是B的左右孩子;G是D的右孩子;F是C的右孩子;H是F的左孩子。相信我已經表達清楚了吧。謝謝各位大蝦了。

第五篇:VC課程設計報告

編號:

河北工業大學計算機軟件技術基礎(VC)2007年課程設計報告

學院 班級 姓名 __ 學號 ____ 成績 __ ____

一、題目:查找滿足特定條件的三位數(27)

二、設計思路

1、總體設計 1)分析程序的功能

2)系統總體結構:設計程序的組成模塊,簡述各模塊功能。

2、各功能模塊的設計:說明各功能模塊的實現方法

3、設計中的主要困難及解決方案

在這部分論述設計中遇到的主要困難及解決方案。1)如何將輸出1~9不重復數字 2)困難2

4、你所設計的程序最終完成的功能 1)說明你編制的程序能完成的功能 2)準備的測試數據及運行結果

三、程序清單

如果是使用一個文件完成的程序,只需列出程序代碼。

如果是使用多文件完成的程序,首先說明程序中的代碼存放在哪些文件中,說明文件名(例如:本程序包含first.cpp、second.cpp、third.cpp和all.h四個文件);然后依次給出每個文件名及該文件清單,例如:

1、first.cpp文件清單

2、second.cpp文件清單

3、third.cpp文件清單

第1頁/共2 頁

編號:

4、all.h文件清單

(說明:程序清單中一定要有注釋。將程序中自己編寫的代碼列在此處,系統自動生成的代碼就不要列出了。程序清單部分的行間距設為1行即可。)

四、對該設計題目有何更完善的方案

1、對自己完成程序進行自我評價。

2、對課題提出更完善的方案

五、收獲及心得體會

1、通過本次課程設計,自己在哪些方面的能力有所提高。

2、收獲和心得體會。

日期: 2007年

(說明:本模板只提供參考,每個同學根據自己課題的特點,可減少或增加某方面的論述)

第2頁/共2 頁

下載VC類定義word格式文檔
下載VC類定義.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    定義一個表示用戶的User類

    //定義一個表示用戶的User類,類中的變量有用戶名、口令和記錄用戶個數的變量,定義類的3個構造方法(無參、為用戶名賦值、為用戶名和口令賦值)、獲取和設置口令的方法和返回類信......

    VC課程設計題目(五篇模版)

    VC++課程設計題目 B090110-12 (2012-04-23 – 2012-05-19)前言:本課程設計分成自測題和綜合題兩部分。兩部分都列入驗收。練習題: 共11道。內容覆蓋主要基本技術:基本的開發環......

    vc 風險投資工作流程

    風投業務流程及步驟?首頁 > 在商言商 國際風險投資的運作過程,一般包括了以下幾個步驟:1. 項目初審:國際風險投資機構在拿到申請表或商業計劃書后,往往只用很短的時間走馬觀花地......

    VC課程設計教學和任務

    VC++ 課程設計指導書 江蘇科技大學南徐學院電子信息系 2011年9月《計算機程序設計(vc++)課程設計》課程設計指導書 一. 課程設計教學和任務 《計算機程序設計(vc++)課程設計》是......

    VC很多實例程序

    VC++6.0應用編程實例 例1:添加對話框條 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { 。。。。。。。。。。。。。。。。。。。。。。。 m_wndDialogBar.Crea......

    VC投資經理工作計劃

    工作計劃 作為一名即將入職的投資經理,通過自身對投資行業的學習以及與公司領導、創投同行的交流,我將近期需要履行和培養的工作職責及專業能力劃分為專業投資、項目資源開發......

    VC編程資料總結

    CString類的完美總結 2012-05-04 15:50:50 我來說兩句 收藏 我要投稿 ①、CString 類對象的初始化: CString str; CString str1(_T("abc")); CString str2 = _T("defg"); TC......

    VC入門的一條路[推薦]

    VC入門的一條路首先聲明,我可不是什么高手,也就是剛脫貧。因為運氣很好,買到了幾本好書,在學習過程中幾乎沒走什么彎路,沒費什么勁就入門了,現在一般的小程序能搞定了。看到那些因......

主站蜘蛛池模板: 亚洲国产在一区二区三区| 97亚洲熟妇自偷自拍另类图片| 55夜色66夜色国产精品视频| 国产裸拍裸体视频在线观看| 亚洲精品中文字幕久久久久| 一本久道高清无码视频| 亚洲人成色99999在线观看| 亚洲人成网站在线播放942| 无码专区—va亚洲v天堂| 国产精品二区一区二区aⅴ污介绍| 熟女俱乐部五十路二区av| 伊人蕉久中文字幕无码专区| 国产妇女馒头高清泬20p多毛| 日本少妇又色又爽又高潮| 中文字幕亚洲无线码a| 视频一区国产第一页| 无码一区二区三区av免费| 久久久久久久久无码精品亚洲日韩| 亚洲国产精品特色大片观看完整版| 亚洲欧美不卡视频在线播放| 亚洲中文字幕高清有码在线| 亚洲中文字幕av不卡无码| 久久久无码精品亚洲日韩电影| 精品人妻少妇一区二区三区| 久久无码字幕中文久久无码| av午夜久久蜜桃传媒软件| 国产精品白丝jkav网站| 福利姬国产精品一区在线| 中文字幕久久久久人妻中出| 性饥渴少妇av无码毛片| www插插插无码免费视频网站| 中文字幕日韩欧美一区二区三区| 无码av无码免费一区二区| 亚洲精品无码av人在线观看| 国内大量揄拍人妻精品視頻| 成人午夜爽爽爽免费视频| 少妇放荡的呻吟干柴烈火动漫| 国产成人精品自在线导航| 热99re久久国超精品首页| 在线播放免费人成毛片乱码| 亚洲中文字幕无码久久2017|