亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

面向對象程序設計之基類,派生類與虛函數

2019-11-11 05:34:30
字體:
來源:轉載
供稿:網友

面向對象程序設計的核心思想是:

數據抽象:實現類與接口的分離。

繼承:定義相似類型并進行相似關系建模。通過繼承聯系在一起的類構成一種層次關系。通常在在層次關系的根部有一個基類,其他類直接或間接由基類繼承而來。這些繼承的類稱為派生類基類負責定義在層次關系中所有類共同擁有的成員,而每個派生類定義各自特有的成員。對于某些函數,基類希望它的派生類各自定義適合自身的版本,此時的基類就將這些函數聲明成虛函數。

class Quote{public: std::string isbn() const; virtual double net_PRice(std::size_t n) const;};

派生類必須使用派生列表,必須將其繼承而來的成員函數中需要覆蓋的那些重新聲明:

class Bulk_Quote : public Quote//Bulj_Quote繼承了Quote{ double net_price(std::size_t n) const override;};

動態綁定:一定程序忽略相似類型的區別,而以統一的方式使用他們的對象。 在C++語言中,當我們使用基類引用或指針調用一個虛函數將發生動態綁定。

double print_total(ostream &os, const A &item,size_t n){ double ret=item.net_price(n);//根據傳入的item的對象類型調用Quote::net_price,還是Bulk_Quote::net_price return ret;}

一個派生類對象包含多個組成部分:一個含有派生類自己定義的(非靜態)成員的子對象,以及一個與該派生類繼承的基類的子對象。因為在派生類對象中含有與其基類對應的組成部分,所以我們能把派生類的對象當成基類對象來使用,而且我們也能把基類的指針或引用綁定到派生類對象中的基類部分上。

Quote item;//基類對象Bulk_Quote bulk;//派生類對象Quote *p=&item;//p指向基類對象p=&bulk;//p指向派生類對象的基類部分Quote &r=bulk;//r綁定到派生類對象的基類部分

Quote類的定義:

這里寫圖片描述

派生類Bulk_Quote定義;

這里寫圖片描述

派生類對象的基類部分與派生類對象自己的數據成員都是在構造函數的初始化階段執行初始化操作的。派生類構造函數同樣是通過構造函數初始化列表來將實參傳遞給基類構造函數的。

這里寫圖片描述 每個類負責定義各自的接口。要想與類的對象交互必須使用類的接口,即使這個對象是派生類的基類部分也如此。盡管從語法上我們可以在派生類構造函數體內給它的 公有成員或受保護的基類成員賦值,但不建議這么做。


如果基類定義了一個靜態成員,則在整個繼承體系中只存在該成員的唯一定義。如果基類中的成員是private的,則派生類無權訪問它。如果某靜態成員是可訪問的,則我們既能通過基類使用它也能通過派生類使用它。


派生類的聲明:

class Bulk_Quote::public Quote;//錯誤,不需要派生列表class Bulk_ Quote;//正確

如果我們想將某個類作為基類,則該類必須是已經定義而非僅聲明。

class Quote;//聲明未定義class Bulk_Quote:public Quote{};//錯誤

防止繼承的發生: C++11標準提供了一種防止繼承發生的方法,即在類名后跟一個關鍵字final.

這里寫圖片描述


靜態類型與動態類型: 表達式的靜態類型在編譯時總是已知的,它是變量聲明時的類型或表達式生成的類型。動態類型則是變量或表達式表示的內存的對象的類型。動態類型直到運行時才知道。基類的指針或引用的靜態類型可能與其動態類型不一致,取決于傳遞的實參。


因為一個基類的對象可能是派生類對象的一部分,也可能不是,所以不存在基類向派生類的自動類型轉換即使一個基類指針或引用綁定在一個派生類對象上,我們也不能執行從基類向派生類的轉換。

當我們用一個派生類對象為一個基類對象初始化或者賦值時,只有該派生類對象的基類部分會被拷貝、移動或賦值,它的派生類部分被忽略掉。

Bulk_Quote bulk;//派生類對象Quote item(bulk);//調用Quote::Quote(const Quote&)item=bulk;//調用Quote::Operator=(const Quote&)

虛函數: 當我們使用基類引用或指針調用一個虛成員函數時會執行動態綁定。因為我們直到運行時才能知道到底調用了哪個版本的虛函數,所以所有虛函數必須有定義。

基類中的虛函數在派生類中隱含地也是一個虛函數。當派生類覆蓋了某個虛函數時,該函數在基類中的形參必須與派生類中的形參嚴格匹配。

override說明符說明派生類中的虛函數,final說明之后任何嘗試覆蓋該函數的操作都將引發錯誤。

如果我們通過基類的引用或指針調用函數,則使用基類中定義的默認實參,即使實際運行的是派生類的函數版本也是如此即傳入派生類函數的是基類函數定義的默認實參。如果虛函數使用默認實參,則基類和派生類中定義的默認實參最好一致。

#include <iostream>class A{public: A(int v):v(v){}//A構造函數 virtual void print(int x=100)//基類虛函數默認實參 { std::cout<<x<<std::endl; }private: int v;};class B:public A//派生類 {public: B(int v):A(v){}//B構造函數 void print(int x=10) override//默認實參與基類不一致 { std::cout<<x+100<<std::endl;//傳入基類虛函數的默認實參 }private: };int main(){ B b(10); A &aptr=b; aptr.print();//200 return 0;}

如果我們希望對虛函數的調用不要進行動態綁定,而是強迫其執行虛函數的某個特定版本,可以使用作用域運算符。

//強行調用基類中定義的函數版本。double undiscounted=baseP->Quote::net_price(42);

如果一個派生類虛函數需要調用它的基類版本,但是沒有使用作用域運算符,則在運行時該調用將被解析為對派生類版本自身的調用,從而導致無限遞歸。


抽象基類:

我們可以在函數體的位置書寫=0來說明一個虛函數為純虛函數。=0只能出現在類內部的虛函數聲明語句處。我們可以為純虛函數提供定義,不過函數體必須定義在類外。

double net_price(std::size_t)const=0;//純虛函數

含有(未經覆蓋直接繼承)純虛函數的類是抽象基類。抽象基類負責定義接口,而后續的其他類可以覆蓋該接口。我們不能直接創建一個抽象基類的對象。 這里寫圖片描述



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人激情综合网| 精品视频久久久久久久| 人人澡人人澡人人看欧美| 国产成人精品在线| 欧美日韩国产精品专区| 日韩禁在线播放| 欧美高清性猛交| 日日狠狠久久偷偷四色综合免费| 性欧美办公室18xxxxhd| 久久久久成人网| 国内精品视频在线| 一区二区三区四区视频| 亚洲午夜av电影| 亚洲欧美国产一本综合首页| 日韩在线视频免费观看高清中文| 97国产精品人人爽人人做| 欧美日韩一区二区免费在线观看| 亚洲色图第一页| 欧美视频一区二区三区…| 国产一区二区三区在线免费观看| 成人激情视频免费在线| 国产ts一区二区| 亚洲欧美制服中文字幕| 91精品国产91久久久久久吃药| 美女av一区二区三区| 欧美xxxx综合视频| 欧美精品少妇videofree| 黑丝美女久久久| 成人黄色片在线| 亚洲视频一区二区| 亚洲国产婷婷香蕉久久久久久| 中文字幕亚洲色图| 日韩在线观看av| 亚洲精品www| 中文字幕日韩免费视频| 亚洲激情在线观看视频免费| 亚洲风情亚aⅴ在线发布| 538国产精品一区二区在线| 懂色aⅴ精品一区二区三区蜜月| 国产自产女人91一区在线观看| 欧美精品成人91久久久久久久| 亚洲精品99久久久久| 欧美视频精品一区| 91国产中文字幕| 97久久伊人激情网| 欧美黑人巨大精品一区二区| 欧美成年人视频| 亚洲精品一区中文| 中文字幕国产精品久久| 美女久久久久久久久久久| 一区二区亚洲精品国产| 国产综合香蕉五月婷在线| 成人免费网站在线看| 欧美日韩另类在线| 国产日产亚洲精品| 亚洲国产欧美一区二区丝袜黑人| 富二代精品短视频| 日本在线观看天堂男亚洲| 国产网站欧美日韩免费精品在线观看| 国内精品模特av私拍在线观看| 国产精品91久久久| 国产成人一区二| 国产精品igao视频| 日韩中文在线中文网在线观看| 成人激情视频免费在线| 欧美中在线观看| 精品日韩视频在线观看| 日韩中文字幕在线视频播放| 亚洲免费电影在线观看| 亚洲欧美在线免费观看| 日韩大陆毛片av| www.日韩不卡电影av| 96国产粉嫩美女| 97在线观看免费| 欧美激情精品久久久久久免费印度| 亚洲第一区中文99精品| 亚洲国产又黄又爽女人高潮的| 国内精品久久久久久久久| 久久影视电视剧凤归四时歌| 国产主播欧美精品| 视频直播国产精品| 欧美裸体xxxx极品少妇| 中文字幕亚洲一区二区三区| 91青草视频久久| 国产精品亚洲激情| 欧美在线观看网址综合| 韩剧1988在线观看免费完整版| 久久精品国产精品| 国外成人在线视频| 亚洲r级在线观看| 亚洲系列中文字幕| 美女福利视频一区| 亚洲欧美制服中文字幕| 国产精品久久久久久久久久久久久| 粉嫩av一区二区三区免费野| 欧美福利在线观看| 亚洲免费av网址| 久久久亚洲影院你懂的| 欧美日韩国产一区二区| 97人人做人人爱| 亚洲综合第一页| 国产精品白丝jk喷水视频一区| 精品中文字幕在线2019| 奇米四色中文综合久久| 日韩av在线影院| 日韩在线视频线视频免费网站| 欧美猛少妇色xxxxx| 国产精品私拍pans大尺度在线| 69av成年福利视频| 国产精品美乳在线观看| 91视频-88av| 久久久久久久久国产| 亚洲激情在线观看视频免费| 国产成人精品电影| 欧美老女人在线视频| www.亚洲成人| 久久九九亚洲综合| 亚洲老板91色精品久久| 一本大道亚洲视频| 55夜色66夜色国产精品视频| 久久精品久久精品亚洲人| 国产69精品99久久久久久宅男| 亚洲欧美一区二区三区四区| 国产97色在线|日韩| 亚洲在线观看视频网站| 国产欧美欧洲在线观看| 日韩av男人的天堂| 国内精品小视频在线观看| 国产欧美精品久久久| 亚洲女同精品视频| 欧美韩国理论所午夜片917电影| 欧美一级高清免费播放| 国产日韩欧美在线视频观看| 精品久久国产精品| 欧美在线视频免费| 亚洲第一福利网站| 国产精品jvid在线观看蜜臀| 国产精品亚发布| 岛国视频午夜一区免费在线观看| 久久精品国产69国产精品亚洲| 欧美性xxxxxxxxx| 国产在线视频不卡| 午夜精品久久久久久久99黑人| 国产裸体写真av一区二区| 欧美精品第一页在线播放| 国产不卡精品视男人的天堂| 青青久久av北条麻妃黑人| 亚洲美女自拍视频| 茄子视频成人在线| 欧美午夜精品久久久久久浪潮| 国产精品黄色影片导航在线观看| 国模精品视频一区二区| 国产69久久精品成人| 亚洲最大福利网| 国产综合在线看| 色偷偷噜噜噜亚洲男人| 国产精国产精品| 日韩中文字幕第一页| 精品国产网站地址| 国产精品专区一| 97精品视频在线播放| 国产999精品视频| 欧美电影《睫毛膏》| 91国内精品久久|