中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

高郵市建設網(wǎng)站龍崗seo網(wǎng)絡推廣

高郵市建設網(wǎng)站,龍崗seo網(wǎng)絡推廣,在線做效果圖的網(wǎng)站,上海網(wǎng)站建設團隊繼承 面向?qū)ο蟪绦蛟O計中最重要的一個概念是繼承。繼承允許我們依據(jù)另一個類來定義一個類,這使得創(chuàng)建和維護一個應用程序變得更容易。這樣做,也達到了重用代碼功能和提高執(zhí)行效率的效果。 當創(chuàng)建一個類時,您不需要重新編寫新的數(shù)據(jù)成員和成…

繼承

面向?qū)ο蟪绦蛟O計中最重要的一個概念是繼承。繼承允許我們依據(jù)另一個類來定義一個類,這使得創(chuàng)建和維護一個應用程序變得更容易。這樣做,也達到了重用代碼功能和提高執(zhí)行效率的效果。

當創(chuàng)建一個類時,您不需要重新編寫新的數(shù)據(jù)成員和成員函數(shù),只需指定新建的類繼承了一個已有的類的成員即可。這個已有的類稱為基類,新建的類稱為派生類。在 Qt 里大量的使用了這種特性,當 Qt 里的類不滿足自己的要求時,我們可以重寫這個類,就是通過繼承需要重寫
的類,來實現(xiàn)自己的類的功能。

一個類可以派生自多個類,這意味著,它可以從多個基類繼承數(shù)據(jù)和函數(shù)。定義一個派生類,我們使用一個類派生列表來指定基類。類派生列表以一個或多個基類命名,形式如下:

class derived-class: access-specifier base-class 

與類的訪問修飾限定符一樣,繼承的方式也有幾種。其中,訪問修飾符 access-specifier 是 public、protected 或 private 其中的一個,base-class 是之前定義過的某個類的名稱。如果未使用訪問修飾符 access-specifier,則默認為 private。

下面來捋一捋繼承的方式,例子都是以公有成員和公有繼承來說明,其他訪問修飾符和其他繼承方式,大家可以在教程外自己捋一捋。這個公有成員和繼承方式也沒有什么特別的,無非就是不同的訪問權(quán)限而已,可以這樣簡單的理解。

1. 公有繼承(public):當一個類派生繼承公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過調(diào)用基類的公有和保護成員來訪問。

2. 保護繼承(protected): 當一個類派生繼承保護基類時,基類的公有和保護成員將成為派生類的保護成員。

3. 私有繼承(private):當一個類派生繼承私有基類時,基類的公有和保護成員將成為派生類的私有成員。

下面我們還是以狗類為例,在 2.2.1 小節(jié)里我們定義的狗類,已經(jīng)定義了 name,age 和 run()方法。假設我們不想重寫這個狗類,而是新建一個 Animal 類,讓狗類去繼承這個 Animal 類。

假設是公有繼承,那么我們是不是可以在狗類實例的對象里去使用繼承 Animal 類里的成員呢?帶著這個疑問,我們使用下面的例子來說明。

新建一個目錄 06_inherit_example,編輯一個 06_inherit_example.cpp 內(nèi)容如下。

1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 /*動物類,抽象出下面兩種屬性, 6 *顏色和體重,是每種動物都具有的屬性 7 */ 8 class Animal 9 { 10 public: 11 /* 顏色成員變量 */ 12 string color; 13 /* 體重成員變量 */ 14 int weight; 
15 }; 16 17 /*讓狗類繼承這個動物類,并在狗類里寫自己的屬性。 18 *狗類擁有自己的屬性 name,age,run()方法,同時也繼承了 19 *動物類的 color 和 weight 的屬性 20 */ 21 class Dog : public Animal 22 { 23 public: 24 string name; 25 int age; 26 void run(); 27 }; 28 29 int main() 30 { 31 Dog dog; 32 dog.name = "旺財"; 33 dog.age = 2; 34 dog.color = "黑色"; 35 dog.weight = 120; 36 cout<<"狗的名字叫:"<<dog.name<<endl; 37 cout<<"狗的年齡是:"<<dog.age<<endl; 38 cout<<"狗的毛發(fā)顏色是:"<<dog.color<<endl; 39 cout<<"狗的體重是:"<<dog.weight<<endl; 40 return 0; 41 } 

第 21 行,Animal 作為基類,Dog 作為派生類。Dog 繼承了 Animal 類。訪問修飾符為 public(公有繼承)。
執(zhí)行下面的指令開始編譯。

g++ 06_inherit_example.cpp -o 06_inherit_example 

編譯完成執(zhí)行的結(jié)果為如下。
在這里插入圖片描述

重載

C++ 允許在同一作用域中的某個函數(shù)和運算符指定多個定義,分別稱為函數(shù)重載和運算符重載。

重載聲明是指一個與之前已經(jīng)在該作用域內(nèi)聲明過的函數(shù)或方法具有相同名稱的聲明,但是它們的參數(shù)列表和定義(實現(xiàn))不相同。

當您調(diào)用一個重載函數(shù)或重載運算符時,編譯器通過把您所使用的參數(shù)類型與定義中的參數(shù)類型進行比較,決定選用最合適的定義。選擇最合適的重載函數(shù)或重載運算符的過程,稱為重載決策。

函數(shù)重載

在同一個作用域內(nèi),可以聲明幾個功能類似的同名函數(shù),但是這些同名函數(shù)的形式參數(shù)(指參數(shù)的個數(shù)、類型或者順序)必須不同。我們不能僅通過返回類型的不同來重載函數(shù)。在 Qt源碼里,運用了大量的函數(shù)重載,所以我們是有必要學習一下什么是函數(shù)重載。不僅在 C++,在其他語言的里,都能看見函數(shù)重載。因為需要不同,所以有重載各種各樣的函數(shù)。

下面通過一個小實例來簡單說明一下函數(shù)重載的用法。我們還是以狗類為說明,現(xiàn)在假設有個需求。我們需要打印狗的體重,分別以整數(shù)記錄旺財?shù)捏w重和小數(shù)記錄旺財?shù)捏w重,同時以整數(shù)打印和小數(shù)打印旺財?shù)捏w重。那么我們可以通過函數(shù)重載的方法實現(xiàn)這個簡單的功能。

新建一個目錄 07_func_overloading,編輯一個 07_func_overloading.cpp 內(nèi)容如下。

1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 class Dog 6 { 7 public: 8 string name; 9 void getWeight(int weight) { 10 cout<<name<<"的體重是:"<<weight<<"kG"<<endl; 11 } 12 13 void getWeight(double weight) { 14 cout<<name<<"的體重是:"<<weight<<"kG"<<endl; 15 } 16 }; 17 18 int main() 19 { 20 Dog dog; 21 dog.name = "旺財"; 22 dog.getWeight(10); 23 dog.getWeight(10.5); 24 return 0; 25 } 

第 9 行,寫了一個方法 getWeight(int weight),以 int 類型作為參數(shù)。

第 13 行,以相同的函數(shù)名 getWeight,不同的參數(shù)類型 double weight,這樣就構(gòu)成了函數(shù)重載。

第 22 行與第 23 行,分別傳進參數(shù)不同的參數(shù),程序就會匹配不同的重載函數(shù)。
執(zhí)行下面的指令編譯。

g++ 07_func_overloading.cpp -o 07_func_overloading 

程序執(zhí)后的結(jié)果如下。
在這里插入圖片描述

通過上面的例子我們可以知道重載函數(shù)的使用方法,避免用戶傳入的參數(shù)類型,有可能用戶傳入的參數(shù)類型不在我們寫的重載函數(shù)里,假若用戶傳入了一個字符串類型,這樣編譯器就會匹配不到相應的重載函數(shù),編譯時就會報錯。其實我們還可以多寫幾個重載函數(shù),設置多幾
種類型,如 string 類型,char 類型,float 類型等。

運算符重載

運算符重載的實質(zhì)就是函數(shù)重載或函數(shù)多態(tài)。運算符重載是一種形式的 C++多態(tài)。目的在于讓人能夠用同名的函數(shù)來完成不同的基本操作。要重載運算符,需要使用被稱為運算符函數(shù)的特殊函數(shù)形式,運算符函數(shù)形式:operatorp(argument-list),operator 后面的’p’為要重載的運
算符符號。重載運算符的格式如下:

<返回類型說明符> operator <運算符符號>(<參數(shù)表>) 
{ <函數(shù)體> } 

下面是可重載的運算符列表:
在這里插入圖片描述
在這里插入圖片描述
下面是不可重載的運算符列表:
在這里插入圖片描述
根據(jù)上表我們知道可以重載的運算符有很多,我們以重載“+”運算符為例,實際上用重載運算符我們在實際應用上用的比較少,我們只需要了解和學習這種思想即可。

下面的實例使用成員函數(shù)演示了運算符重載的概念。在這里,對象作為參數(shù)進行傳遞,對象的屬性使用 this 運算符進行訪問。下面還是以我們熟悉的狗類為例。聲明加法運算符用于把兩個 Dog 對象相加的體重相加,返回最終的 Dog 對象然后得到第三個 Dog 對象的體重。

新建一個目錄 08_operator_example,編輯一個 08_operator_example.cpp 內(nèi)容如下。

1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 class Dog 6 { 7 public: 8 int weight; 9 Dog operator+(const Dog &d) { 10 Dog dog; 11 dog.weight = this->weight + d.weight; 12 return dog; 13 } 14 15 }; 16 17 int main() 18 { 19 Dog dog1; 20 Dog dog2; 21 Dog dog3; 
22 23 dog1.weight = 10; 24 dog2.weight = 20; 25 dog3 = dog1 + dog2; 26 cout<<"第三只狗的體重是:"<<dog3.weight<<endl; 27 return 0; 28 } 

第 9 至 13 行,重載“+”運算符,注意函數(shù)必須與類名同名,把 Dog 對象作為傳遞,使用 this 運算符進行訪問。然后返回一個 dog 對象。
執(zhí)行下面指令進行編譯。

g++ 08_operator_example.cpp -o 08_operator_example 

編譯完成后運行的結(jié)果如下。
在這里插入圖片描述

結(jié)果可以預知的,重載運算符“+”,可以把兩個對象進行相加。在普通的算術(shù)運算符“+”是不能將兩個對象進行相加的,所以我們重載運算符的意義可以體現(xiàn)在這里。

多態(tài)

C++多態(tài)意味著調(diào)用成員函數(shù)時,會根據(jù)調(diào)用函數(shù)的對象的類型來執(zhí)行不同的函數(shù);

形成多態(tài)必須具備三個條件:

1. 必須存在繼承關系;
2. 繼承關系必須有同名虛函數(shù)(其中虛函數(shù)是在基類中使用關鍵字 virtual 聲明的函數(shù),在派生類中重新定義基類中定義的虛函數(shù)時,會告訴編譯器不要靜態(tài)鏈接到該函數(shù));
3. 存在基類類型的指針或者引用,通過該指針或引用調(diào)用虛函數(shù)。

這里我們還需要理解兩個概念:

虛函數(shù):

是在基類中使用關鍵字 virtual 聲明的函數(shù)。在派生類中重新定義基類中定義的虛函數(shù)時,會告訴編譯器不要靜態(tài)鏈接到該函數(shù)。我們想要的是在程序中任意點可以根據(jù)所調(diào)用的對象類型來選擇調(diào)用的函數(shù),這種操作被稱為動態(tài)鏈接,或后期綁定。虛函數(shù)聲明如下:virtual
ReturnType FunctionName(Parameter) 虛函數(shù)必須實現(xiàn),如果不實現(xiàn),編譯器將報錯

純虛函數(shù):

若在基類中定義虛函數(shù),以便在派生類中重新定義該函數(shù)更好地適用于對象,但是您在基類中又不能對虛函數(shù)給出有意義的實現(xiàn),這個時候就會用到純虛函數(shù)。純虛函數(shù)聲明如下:

virtual void funtion1()=0; 純虛函數(shù)一定沒有定義,純虛函數(shù)用來規(guī)范派生類的行為,即接口。

包含純虛函數(shù)的類是抽象類,抽象類不能定義實例,但可以聲明指向?qū)崿F(xiàn)該抽象類的具體類的指針或引用。

上面那些概念大家可以捋一捋,畢竟 C++概念還是挺多的。為什么說到多態(tài)要與虛函數(shù)和純虛函數(shù)扯上關系?光說概念沒有實例確實難理解。下面我們還是以我們熟悉的狗類和動物類,另外加一個貓類進行多態(tài)的講解。

http://www.risenshineclean.com/news/27193.html

相關文章:

  • aso.net 網(wǎng)站開發(fā)營銷策略
  • 做app還是網(wǎng)站太原百度seo排名軟件
  • phpwind怎么做網(wǎng)站整站優(yōu)化工具
  • 怎樣做百度推廣網(wǎng)站天津谷歌優(yōu)化
  • 昆明學校網(wǎng)站建設長沙網(wǎng)站優(yōu)化體驗
  • 網(wǎng)站做cdn需要注意什么意思百家號排名
  • 如何做網(wǎng)站靜態(tài)頁面?zhèn)€人推廣網(wǎng)站
  • 網(wǎng)站怎么做聯(lián)系我們頁面營銷技巧培訓ppt
  • 請收網(wǎng)址999938關鍵詞優(yōu)化公司哪家效果好
  • 專業(yè)建網(wǎng)站平臺網(wǎng)絡營銷是做什么的工作
  • 中山網(wǎng)站建設哪家好seo是什么服務
  • 網(wǎng)站的排版網(wǎng)絡營銷成功的案例分析
  • 連云港專業(yè)網(wǎng)站制作公司seo快排軟件
  • 惠州seo推廣公司南寧seo平臺標準
  • 網(wǎng)站域名地址查詢網(wǎng)站創(chuàng)建
  • 如何進行優(yōu)化短視頻關鍵詞優(yōu)化
  • 網(wǎng)站模板如何編輯軟件代引流推廣公司
  • 建設網(wǎng)站一般要多錢sem工作內(nèi)容
  • 南通網(wǎng)站建設規(guī)劃成都網(wǎng)絡營銷公司哪家好
  • 網(wǎng)站優(yōu)化要怎么做seo做什么網(wǎng)站賺錢
  • 網(wǎng)站不足之處人民網(wǎng)疫情最新消息
  • 麻城做網(wǎng)站做一個網(wǎng)站需要什么
  • 知名的電子商務網(wǎng)站紹興seo公司
  • 斗破蒼穹制作公司seo關鍵詞排名優(yōu)化官網(wǎng)
  • b2b網(wǎng)站建設怎么做大學生網(wǎng)絡營銷策劃方案書
  • 建設銀行網(wǎng)站網(wǎng)頁丟失口碑營銷的優(yōu)勢有哪些
  • 畢業(yè)設計做企業(yè)門戶網(wǎng)站今日新聞頭條大事
  • 重慶國外網(wǎng)站推廣企業(yè)為何選擇網(wǎng)站推廣外包?
  • 網(wǎng)站建設石家莊百度人工申訴客服電話
  • 做彩票的網(wǎng)站嗎中國企業(yè)網(wǎng)