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

首頁 > 編程 > C++ > 正文

C++之普通成員函數(shù)、虛函數(shù)以及純虛函數(shù)的區(qū)別與用法要點

2020-05-23 14:17:41
字體:
供稿:網(wǎng)友

本篇文章主要介紹了C++中的普通成員函數(shù)、虛函數(shù)以及純虛函數(shù),非常的詳細,有需要的朋友可以參考下

普通成員函數(shù)是靜態(tài)編譯的,沒有運行時多態(tài),只會根據(jù)指針或引用的“字面值”類對象,調(diào)用自己的普通函數(shù);虛函數(shù)為了重載和多態(tài)的需要,在基類中定義的,即便定義為空;純虛函數(shù)是在基類中聲明的虛函數(shù),它可以再基類中有定義,且派生類必須定義自己的實現(xiàn)方法。

假設(shè)我們有三個類Person、Teacher、Student它們之間的關(guān)系如下:

C++之普通成員函數(shù)、虛函數(shù)以及純虛函數(shù)的區(qū)別與用法要點

類的關(guān)系圖

普通成員函數(shù)

【Demo1】

根據(jù)這個類圖,我們有下面的代碼實現(xiàn)

 

 
  1. #ifndef __OBJEDT_H__ 
  2. #define __OBJEDT_H__ 
  3.  
  4. #include <string> 
  5. #include <iostream> 
  6.  
  7. class Person 
  8. public
  9. Person(const string& name, int age) : m_name(name), m_age(age) 
  10.  
  11. void ShowInfo() 
  12. cout << "姓名:" << m_name << endl; 
  13. cout << "年齡:" << m_age << endl; 
  14.  
  15. protected
  16. string m_name; //姓名 
  17. int m_age; //年齡 
  18. }; 
  19.  
  20.  
  21. class Teacher : public Person 
  22. public
  23. Teacher(const string& name, int age, const string& title) 
  24. : Person(name, age), m_title(title) 
  25.  
  26. void ShowInfo() 
  27. cout << "姓名:" << m_name << endl; 
  28. cout << "年齡:" << m_age << endl; 
  29. cout << "職稱:" << m_title << endl; 
  30.  
  31. private
  32. string m_title; //職稱 
  33. }; 
  34.  
  35. class Student : public Person 
  36. public
  37. Student(const string& name, int age, int studyId) 
  38. : Person(name, age), m_studyId(studyId) 
  39.  
  40. void ShowInfo() 
  41. cout << "姓名:" << m_name << endl; 
  42. cout << "年齡:" << m_age << endl; 
  43. cout << "學(xué)號:" << m_studyId << endl; 
  44.  
  45. private
  46. int m_studyId; //學(xué)號 
  47. }; 
  48.  
  49. #endif //__OBJEDT_H__ 

測試代碼:

 

 
  1. void test() 
  2. Person* pPerson = new Person("張三", 22); 
  3. Teacher* pTeacher = new Teacher("李四", 35, "副教授"); 
  4. Student* pStudent = new Student("王五", 18, 20151653); 
  5. pPerson->ShowInfo(); 
  6. cout << endl; 
  7. pTeacher->ShowInfo(); 
  8. cout << endl; 
  9. pStudent->ShowInfo(); 
  10. cout << endl; 
  11. delete pPerson; 
  12. delete pTeacher; 
  13. delete pStudent; 

結(jié)果:

姓名:張三

年齡:22

姓名:李四

年齡:35

職稱:副教授

姓名:王五

年齡:18

學(xué)號:20151653

說明:

這里的ShowInfo就是一個普通的函數(shù)。pPerson、pTeacher和pStudent三個對象調(diào)用ShowInfo分別展示自己的信息。

我們知道:父類的指針是可以指向子類的對象的。我們把上面的測試代碼稍微改一下:

【Demo2】

 

 
  1. void test() 
  2. Person* pPerson = new Person("張三", 22); 
  3. Person* pTeacher = new Teacher("李四", 35, "副教授"); 
  4. Person* pStudent = new Student("王五", 18, 20151653); 
  5. pPerson->ShowInfo(); 
  6. cout << endl; 
  7. pTeacher->ShowInfo(); 
  8. cout << endl; 
  9. pStudent->ShowInfo(); 
  10. cout << endl; 
  11. delete pPerson; 
  12. delete pTeacher; 
  13. delete pStudent; 

結(jié)果:

姓名:張三

年齡:22

姓名:李四

年齡:35

姓名:王五

年齡:18

這時,pTeacher和pStudent只輸出了姓名和年齡,并沒有輸出子類所具有的特性(職稱和學(xué)號)。這應(yīng)該不是你期望的結(jié)果,你可能期望pTeacher和pStudent輸出老師和學(xué)生的完整信息,這時就需要用虛函數(shù)。

虛函數(shù)

我們把Person中的ShowInfo成員改成虛函數(shù)(在前面加上virtual),代碼如下:

【Demo3】

 

 
  1. class Person 
  2. public
  3. Person(const string& name, int age) : m_name(name), m_age(age) 
  4.  
  5. virtual void ShowInfo() 
  6. cout << "姓名:" << m_name << endl; 
  7. cout << "年齡:" << m_age << endl; 
  8.  
  9. protected
  10. string m_name; //姓名 
  11. int m_age; //年齡 
  12. }; 

在執(zhí)行上面【Demo2】中的測試代碼,得到我們想到的結(jié)果:

姓名:張三

年齡:22

姓名:李四

年齡:35

職稱:副教授

姓名:王五

年齡:18

學(xué)號:20151653

虛函數(shù)用法要點:

虛函數(shù)的聲明方式:virtual RETURN_TYPE functionName(ARGS 參數(shù)列表);

虛函數(shù)作用:現(xiàn)實C++中的多態(tài),進行動態(tài)綁定(父類指針可指向子類的對象),直到運行時才知道要調(diào)用哪個版本(哪個類定義)的函數(shù);

我們必要對虛函數(shù)進行定義;

一旦父類的成員函數(shù)聲明virtual,其子類的函數(shù)不管有沒有聲明為virtual,都是虛函數(shù);

如果虛函數(shù)使用默認實參,父類和子類定義的默認實參最好一致。

【Demo4】:針對第4點說明:

 

 
  1. class Person 
  2. public
  3. Person(const string& name, int age) : m_name(name), m_age(age) 
  4.  
  5. virtual void ShowInfo() 
  6. cout << "姓名:" << m_name << endl; 
  7. cout << "年齡:" << m_age << endl; 
  8.  
  9. string GetName(); //正確,普通函數(shù)如果不被使用,可以只有聲明沒有定義 
  10. virtual int GetAge(); //錯誤,虛函數(shù)必須要有定義,即使是一個空實現(xiàn),因為編譯器無法確定會使用哪個函數(shù) 
  11.  
  12.  
  13. protected
  14. string m_name; //姓名 
  15. int m_age; //年齡 
  16. }; 

【Demo5】:針對第5點進行說明:

設(shè)計我們的類如下定義。

 

 
  1. class Person 
  2. public
  3. virtual void SetAge(int age = 0) 
  4. m_age = age; 
  5. //... 省略 
  6. }; 
  7.  
  8.  
  9. class Teacher : public Person 
  10. public
  11. virtual void SetAge(int age = 1) 
  12. m_age = age; 
  13.  
  14. //... 省略 
  15. }; 
  16.  
  17. class Student : public Person 
  18. public
  19. virtual void SetAge(int age = 2) 
  20. m_age = age; 
  21.  
  22. //... 省略 
  23. }; 

測試1:

 

 
  1. void test() 
  2. Person* pPerson = new Person("張三", 22); 
  3. Teacher* pTeacher = new Teacher("李四", 35, "副教授"); 
  4. Student* pStudent = new Student("王五", 18, 20151653); 
  5. pPerson->SetAge(); 
  6. pTeacher->SetAge(); 
  7. pStudent->SetAge(); 
  8.  
  9. pPerson->ShowInfo(); 
  10. cout << endl; 
  11. pTeacher->ShowInfo(); 
  12. cout << endl; 
  13. pStudent->ShowInfo(); 
  14. cout << endl; 
  15. delete pPerson; 
  16. delete pTeacher; 
  17. delete pStudent; 

結(jié)果:

姓名:張三

年齡:0

姓名:李四

年齡:1

職稱:副教授

姓名:王五

年齡:2

學(xué)號:20151653

測試2:

 

 
  1. void test() 
  2. Person* pPerson = new Person("張三", 22); 
  3. Person* pTeacher = new Teacher("李四", 35, "副教授"); 
  4. Person* pStudent = new Student("王五", 18, 20151653); 
  5. pPerson->SetAge(); 
  6. pTeacher->SetAge(); 
  7. pStudent->SetAge(); 
  8.  
  9. pPerson->ShowInfo(); 
  10. cout << endl; 
  11. pTeacher->ShowInfo(); 
  12. cout << endl; 
  13. pStudent->ShowInfo(); 
  14. cout << endl; 
  15. delete pPerson; 
  16. delete pTeacher; 
  17. delete pStudent; 

結(jié)果:

姓名:張三

年齡:0

姓名:李四

年齡:0

職稱:副教授

姓名:王五

年齡:0

學(xué)號:20151653

純虛函數(shù)

在上面的例子中,我們假設(shè)所有的人都要工作,但不同的人工作的方式不同。于是我們就要強制要求繼承自Person的子類都要有工作的方法,這就需要純虛函數(shù)。定義如下:

【Demo6】

 

 
  1. class Person 
  2. public
  3. //... 省略 
  4. virtual void DoWork() = 0; 
  5. //... 省略 
  6. }; 

但此時我們編譯

 

 
  1. Person* pPerson = new Person("張三", 22); 

這句話時會報錯:error C2259: ‘Person' : cannot instantiate abstract class

這是因為我們并沒有為Person實現(xiàn)DoWork方法,而包含純虛函數(shù)的類是一個抽象的類,抽象類不能被實例化。

于是我們在子類中對它實現(xiàn)如下:

【Demo7】

 

 
  1. class Teacher : public Person 
  2. public
  3. //... 省略 
  4. virtual void DoWork() 
  5. cout << "教書..." << endl; 
  6. //... 省略 
  7. }; 
  8.  
  9. class Student : public Person 
  10. public
  11. //... 省略 
  12. virtual void DoWork() 
  13. cout << "學(xué)習(xí)..." << endl; 
  14. //... 省略 
  15. }; 

沒用DoWork方法:

 

 
  1. void test() 
  2. Person* pTeacher = new Teacher("李四", 35, "副教授"); 
  3. Person* pStudent = new Student("王五", 18, 20151653); 
  4.  
  5. pTeacher->DoWork(); 
  6. cout << endl; 
  7. pStudent->DoWork(); 
  8. cout << endl; 
  9.  
  10. delete pTeacher; 
  11. delete pStudent; 

結(jié)果:

教書…

學(xué)習(xí)…

純虛函數(shù)用法要點:

純虛函數(shù)的聲明方式:virtual RETURN_TYPE functionName(ARGS 參數(shù)列表) = 0;

含有純虛函數(shù)的類是一個抽象的類,抽象類不能被實例化。

包含純虛函數(shù)的抽象類常用來當作對外的接口,說明這個類有什么功能,而沒有具體的實現(xiàn),基體的實現(xiàn)交由子類完成。

通過以上對普通成員函數(shù)、虛函數(shù)以及純虛函數(shù)的介紹,希望可以對大家有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
中文字幕亚洲一区二区三区五十路| a天堂中文在线官网在线| 中文字幕第一页久久| 欧美巨乳在线观看| 午夜视频国产| 天堂一区二区三区四区| 波多野结衣视频观看| 欧美三级午夜理伦三级小说| 亚洲一区二区三区小说| 成人黄色av| 自拍偷拍在线视频| 亚洲免费播放| 国产日韩欧美一区二区三区在线观看| www.超碰97| 欧美激情综合在线| 亚洲黄色天堂| 国产成人亚洲综合a∨猫咪| 日韩欧美激情四射| 国产精品乱子乱xxxx| 亚洲欧美综合另类中字| 亚洲永久免费| 婷婷五月在线视频| 国产日韩欧美一区二区三区四区| 亚洲成人动漫在线播放| 第三区美女视频在线| 亚洲精品久久久| 国产亚洲女人久久久久毛片| 在线视频中文亚洲| 精品国产免费人成网站| 欧美性色综合| 99久久激情视频| 成人av综合网| 伦理片一区二区三区| 91久色国产| 久久久久资源| 韩国精品美女www爽爽爽视频| 免费在线欧美黄色| 欧美精品免费在线| 夜色资源网av在先锋网站观看| 午夜精品久久久久久久第一页按摩| 国产又大又粗又长| 亚洲日本在线视频观看| 一道在线中文一区二区三区| 国产亚洲精品久久久| 欧美mv日韩mv亚洲| 欧美高清性xxxxhd| 超碰aⅴ人人做人人爽欧美| 欧美日韩一区二区三区免费看| 亲子伦视频一区二区三区| 性欧美video视频另类| 欧美大交乱xxxx| 91精品高清| 久久久久久无码精品人妻一区二区| 一二三四视频社区在线| 黄色成人一级片| 精品99视频| www.欧美视频| 三区四区电影在线观看| 里番精品3d一二三区| 韩日精品一区| 亚洲一区三区电影在线观看| 国产精品爽爽久久久久久| 欧美日韩中文国产| 成人激情视频| av电影资源| 亚洲午夜国产成人av电影男同| 亚洲mv大片欧洲mv大片精品| 激情都市一区二区| 精品无码久久久久成人漫画| 伊人久久大香| 你懂的一区二区| 国产麻豆久久| 日本欧美国产在线| 午夜精品www| 精品国产乱子伦一区二区| 久久亚洲精品小早川怜子66| 91女神在线视频| 拍拍拍在线观看视频免费| 极品颜值美女露脸啪啪| 精品欧美一区二区三区免费观看| 成熟丰满熟妇高潮xxxxx视频| 国产精品无码专区| 日韩黄在线观看| 亚洲五码在线观看视频| 欧美日韩国产成人在线免费| 美女扒开大腿让男人桶| 天天操天天插| 一区二区三区精密机械公司| 一区二区三区四区精品| 精品国产乱码91久久久久久网站| 91精品国产自产拍在线观看蜜| 天天色天天上天天操| 国产一区二区三区在线| 天天操 夜夜操| 色老头一区二区三区| 老牛影视av牛牛影视av| 1区1区3区4区产品乱码芒果精品| 素人av在线| 久久精品中文字幕免费mv| 精品国产午夜福利在线观看| 亚洲国产一区二区三区在线观看| 一区在线观看视频| 午夜黄色福利视频| 不卡的免费av| 欧美aaaaaa午夜精品| 久久精品青青大伊人av| 精品动漫一区二区三区在线观看| www.男人天堂.com| 国产亚洲色婷婷久久| h片在线观看视频免费免费| 视频在线观看你懂的| 2022成人影院| 国产成人免费观看网站| 26uuu日韩精品一区二区| 国产精品一区二区三区美女| 黑人巨大精品欧美一区免费视频| 国产精品中文字幕制服诱惑| 亚洲不卡一卡2卡三卡4卡5卡精品| 亚洲无码精品在线播放| 姬川优奈av一区二区在线电影| 97超碰资源站| 日韩精品极品视频在线观看免费| 欧美一区视久久| 波多野结衣在线网址| 国产欧美久久久久久| 中文字幕一区二区三区精彩视频| 欧美黄色成人网| 精品国产999久久久免费| 99re6在线视频精品免费| 亚洲国产天堂网精品网站| 黄瓜视频免费观看在线观看www| 69看片网站| 色噜噜狠狠成人网p站| ㊣最新国产の精品bt7086| 欧美r级在线观看| 无码国产精品高潮久久99| а√在线天堂官网| 久久精视频免费在线久久完整在线看| 黑人粗进入欧美aaaaa| 亚洲女同志亚洲女同女播放| 黄网站色视频免费观看| 久久一区二区三区视频| 亚洲一区二区在线免费观看| 国产麻豆剧传媒精品国产| 国产专区在线视频| 人与动物性xxxx| 美女福利视频在线| 综合久久一区| 亚洲视频在线播放免费| 波多野结衣视频观看| 精品一区二区三区四区五区| 自拍在线播放| 97伦伦午夜电影理伦片| 久久精品国产精品青草| 在线成人综合色一区| 色猫猫国产区一区二在线视频| 狠狠操第一页| 色婷婷久久一区二区| 精品精品国产国产自在线| 国产一区私人高清影院| 亚洲另类春色国产| 97久久网站| 国产视频青青| 国产精品h片在线播放| 91国语精品自产拍在线观看性色| 亚洲国产成人tv| 欧美区亚洲区| 国产精品毛片一区二区| 日本高清成人免费播放| jizzjizz少妇亚洲水多| 污污视频在线免费观看| 亚洲国产视频一区二区三区| 韩国视频一区二区三区| 亚洲黄色小说图片| 亚洲免费伊人电影| 亚洲黄色a级片| p色视频免费在线观看| www.久久精品视频| 国内老熟妇对白xxxxhd| 国产综合在线看| mm1313亚洲国产精品美女| 亚洲乱码一区二区三区在线观看| 日韩在线视频导航| 亚洲精品免费播放| 26uuu久久天堂性欧美| 久久久久久久久久久av| 亚洲国产成人porn| 国产精品臀控福利在线观看| 老司机深夜福利网站| 国产视频三级在线观看播放| 美臀av在线| 在线电影欧美成精品| 久久躁日日躁aaaaxxxx| 亚洲小说图片视频| 四季久久免费一区二区三区四区| 综合激情网...| 亚洲欧美日韩系列| 久久亚洲国产中v天仙www| 强乱中文字幕av一区乱码| 在线免费观看的av网站| 99re热视频这里只精品| 欧美第一淫aaasss性| 国产成人精品亚洲线观看| 免费黄色小视频在线观看| 亚洲区 欧美区| 欧美人狂配大交3d怪物一区| 丰满岳乱妇一区二区三区| 秋霞av亚洲一区二区三| 日本aⅴ中文| 国外亚洲成av人片在线观看| 在线激情影院一区| 在线视频免费一区二区| 91精品国产综合久久久久久丝袜| 久久777国产线看观看精品| 日韩精品a在线观看91| 亚洲欧美日本国产有色| 欧美少妇精品| 女教师高潮黄又色视频| 欧美黑人xxxxx| 欧美在线观看一区| 亚洲国产视频在线观看| 四虎影在永久在线观看| 成人亚洲免费视频| 147欧美人体大胆444| 男男受被啪到高潮自述| 91麻豆精品久久毛片一级| 亚洲精品久久视频| 国产精品三上| 国产成人精品免费视频大全最热| 久久久999国产精品| 日韩精品――色哟哟| 亚洲精品成人av久久| 欧美美女性生活视频| 潘金莲一级淫片aaaaa免费看| 中文字幕v亚洲ⅴv天堂| 久久婷婷亚洲| 欧美一区二区视频免费观看| 日韩高清免费在线| 国产三级午夜理伦三级| 自拍偷拍亚洲一区| 国产一级片子| 91免费视频国产| 久久久国产精品一区二区三区| 91视频在线视频| 国产激情综合| 日韩欧美伦理| 欧美三级午夜理伦三级富婆| 日韩精品福利片午夜免费观看| 欧美性x x x| **欧美日韩vr在线| 亚洲国产高清福利视频| 色老汉av一区二区三区| 午夜久久久久久久久| 国产精品久线观看视频| aa在线观看视频| 欧美主播一区二区三区美女 久久精品人| 国产精品亚洲色图| 国产精品18久久久久久久久| 亚洲丝袜一区| 97av视频在线| 国产成人免费电影| 亚洲一级电影视频| 亚洲欧美怡红院| 天堂中文资源在线| 欧美一级片中文字幕| **爰片久久毛片| 久久久亚洲综合网站| 国产亚洲欧美日韩美女| 亚洲手机在线观看| 奇米在线7777在线精品| 国产精品美女久久久| 在线观看的av网站| 亚洲色图狂野欧美| 国产免费av一区| 91不卡在线观看| 99在线热播| 另类图片国产| 国产免费一级片| 亚洲国产国产亚洲一二三| 日本免费视频www| 亚洲h动漫在线| 成人欧美精品久久久久影院| √天堂中文官网8在线| 亚洲美洲欧洲综合国产一区| 国产伦精品一区二区三区免费| 在线免费观看高清视频| 国产精品国产馆在线真实露脸| 制服丝袜中文字幕第一页| 欧美日韩一区二区三区| 亚洲 欧美 变态 另类 综合| 国产精品伦一区二区三区| 国产精品久久久久久久美男| 欧美专区在线视频| 一区二区三区高清视频在线观看| 国产一线天粉嫩馒头极品av| 国产成人亚洲精品乱码在线观看| 日韩高清在线一区二区| 久久久久久久久久亚洲| 国产免费人人看| 成人做爰视频www网站小优视频| 激情文学综合插| 色综合久久99| 厕沟全景美女厕沟精品| 激情欧美丁香| 国产精品波多野结衣| 久久影院资源站| 亚洲影视资源网| 午夜免费久久看| 国产综合动作在线观看| 电影亚洲精品噜噜在线观看| 国外成人在线直播| 国产美女精品| 欧美色资源站| 国产a级毛片一区| 黄页视频在线免费观看| 91 在线视频观看| 99久久综合狠狠综合久久| 久久久久高清精品| 亚洲91网站| 午夜av电影| 中文字幕日韩一区二区不卡| 亚洲天堂美女视频| 日本黄色激情视频| 欧美高清性xxxxxxx| 136av视频导航| 亚洲一区在线观看免费| 国产九色在线播放九色| 免费高清成人|