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

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

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

2019-11-11 04:57:12
字體:
來源:轉載
供稿:網友

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

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

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

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
日韩一区二区在线视频| 亚洲精品狠狠操| 91社影院在线观看| 国语自产精品视频在线看| 午夜精品久久久久久久久久久久| 91精品国产91久久| 国产精品va在线播放| 亚洲一区av在线播放| 亚洲视频欧洲视频| 久久精品国产免费观看| 亚洲成人激情图| 精品中文字幕在线观看| 亚洲美女av黄| 久久久久国产精品免费| 欧美日韩国产成人| 国产成人小视频在线观看| 日韩资源在线观看| 欧美性猛交xxxx黑人| 久久91亚洲精品中文字幕奶水| 亚洲一区二区国产| 91po在线观看91精品国产性色| 一区二区三区久久精品| 青草成人免费视频| 欧美黄色片在线观看| 成人精品久久久| 亚洲视频在线播放| 亚洲欧美制服另类日韩| 久久久国产影院| 亚洲最新av网址| 国产精品高清在线| 亚洲一区二区久久久久久久| 欧美xxxx综合视频| 国产成人精品免费久久久久| 日韩精品免费视频| 亚洲成色999久久网站| 日韩欧美有码在线| 欧美电影《睫毛膏》| 亚洲网址你懂得| 欧美日韩国产成人| 欧美高清视频免费观看| 92看片淫黄大片欧美看国产片| 国产精品视频久久| 国产精品久久久久7777婷婷| 欧美中文字幕第一页| 久久国产精品亚洲| 国产精品美女网站| 色综合久久久久久中文网| 日韩欧美国产一区二区| 国产成人精品在线视频| 欧美大学生性色视频| 日韩美女视频中文字幕| 麻豆成人在线看| 国产福利精品在线| 日韩精品视频免费专区在线播放| 欧美综合国产精品久久丁香| 最新中文字幕亚洲| 久久精品国产亚洲一区二区| 色av中文字幕一区| 欧美成人激情视频| 国产免费一区二区三区在线能观看| 国产成人涩涩涩视频在线观看| 国产成人精品在线| 亚洲免费一级电影| 国产成人精品在线观看| 中文字幕国产亚洲| 91免费观看网站| 77777亚洲午夜久久多人| 成人a在线观看| 欧美日韩国产色| 国产99久久精品一区二区| 国内免费久久久久久久久久久| 这里只有精品在线播放| 国产91精品最新在线播放| 午夜精品福利在线观看| 91精品国产91久久久久久吃药| zzijzzij亚洲日本成熟少妇| 91亚洲一区精品| 91日本视频在线| 欧美亚洲另类视频| 日韩性生活视频| 一区二区三区视频在线| 中文字幕日韩欧美在线视频| 日韩av中文字幕在线免费观看| 日韩在线免费视频观看| 亚洲国产另类 国产精品国产免费| 欧美体内谢she精2性欧美| 欧美极品在线视频| 成人久久一区二区| 高清日韩电视剧大全免费播放在线观看| 欧美激情亚洲综合一区| 欧美成人黑人xx视频免费观看| 久久人体大胆视频| 国产精品福利无圣光在线一区| 欧美日韩中文字幕在线视频| 美日韩精品视频免费看| 91香蕉亚洲精品| 国产成人精品一区二区在线| 国产小视频国产精品| 中文字幕精品—区二区| 久久激情五月丁香伊人| 国产精品v片在线观看不卡| 亚洲人成绝费网站色www| 亚洲第一av网| 日本欧美在线视频| 欧美性xxxxhd| 日本一欧美一欧美一亚洲视频| 91精品国产电影| 久久精品中文字幕一区| 久久99青青精品免费观看| 亚洲免费视频一区二区| 日韩有码在线播放| 欧美亚洲激情视频| 亚洲女成人图区| 中文字幕精品久久| 午夜剧场成人观在线视频免费观看| 亚洲一区二区三区四区在线播放| 欧美孕妇性xx| 亚洲无av在线中文字幕| 久久久精品国产| 在线视频欧美日韩精品| 国产欧美日韩91| www.日本久久久久com.| 国产成人精品综合久久久| 欧美日韩性生活视频| 亚洲欧美激情另类校园| 成人美女免费网站视频| 4444欧美成人kkkk| 亚洲精品99久久久久中文字幕| 国产精品成人一区| 欧美黑人性猛交| 日韩a**中文字幕| 国产91在线视频| 麻豆成人在线看| 久久精品中文字幕一区| 亚洲女人天堂成人av在线| 日本aⅴ大伊香蕉精品视频| 91精品视频播放| 欧美一级片在线播放| 色综合天天综合网国产成人网| 日韩在线免费视频| 菠萝蜜影院一区二区免费| 九九精品视频在线观看| 日韩在线观看高清| 精品视频www| 国产精品一区二区三区在线播放| 国产女人18毛片水18精品| 国产精品白丝av嫩草影院| 欧美激情18p| 日韩av综合中文字幕| 91免费人成网站在线观看18| 国产成人精品av在线| 中文字幕久久精品| 久久久久久久97| 91精品国产精品| 中文在线资源观看视频网站免费不卡| 亚洲人成啪啪网站| 亚洲激情视频在线| 日韩欧美aⅴ综合网站发布| 成人女保姆的销魂服务| 国内精品久久久久久中文字幕| 91香蕉亚洲精品| 九九久久久久久久久激情| 亚洲成人精品久久| 国产精品av在线|