<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
定義一個父類別
class Person{ public: virtual void f(){cout << "use f()" << endl;} virtual void g(){cout << "use g()" << endl;} virtual void h(){cout << "use h()" << endl;} };
父類別物件其在記憶體中佈局如下:
class Bag:public Person{ public: virtual void i(){cout << "use i()" << endl;} virtual void j(){cout << "use j()" << endl;} };
可以看出虛擬函式表內的虛擬函式是按宣告順序進行排序的
父類別虛擬函式排在子類虛擬函式之前
class Bag:public Person{ public: void f(){cout << "class Bag use fun" << endl;} virtual void i(){cout << "use i()" << endl;} virtual void j(){cout << "use j()" << endl;} };
子類覆蓋的虛擬函式,放在父類別原先放該虛擬函式的位置上。
所以當父類別指標指向該子類物件時,會呼叫該子類的過載函數
子類的虛擬函式放在第一張虛擬函式表中,緊跟著第一個父類別的虛擬函式
如果每個父類別都有虛擬函式,則有幾個父類別就有幾張虛擬函式表
父類別的虛擬函式被子類覆蓋後,則該子類對應的過載函數的位置在被覆蓋的父類別函數的位置上。(如果父類別沒有該虛擬函式,則不用被覆蓋)
父類別的虛擬函式被子類覆蓋後,則父類別指標指向該子類物件時,呼叫的f()便是子類中過載的f()
#include <iostream> using namespace std; class Person1{ public: virtual void f(){} virtual void g(){} virtual void h(){} virtual ~Person1(){} }; class Person2{ public: virtual void f(){} virtual void g(){} virtual void h(){} void a(){ // 成員函數,不需要過載 cout << "class Person2" << endl; } virtual ~Person2(){} }; class Person3{ public: virtual void g(){} virtual void h(){} virtual ~Person3(){} }; class Bag:public Person1, public Person2, public Person3{ public: void f(){ cout << "Bag f()" << endl; } void g(){ cout << "Bag g()" << endl; } void a(){ cout << "Class Bag" << endl; } }; int main(int argc, char const *argv[]) { Person3* p3 = new Bag; //p3->f(); // P3 沒有成員函數f() // 多型首先得是 父類別有虛擬函式,其次是子類要定義該函數的過載 // 如果父類別的虛擬函式改為成員函數,則子類無法進行過載,即無法實現多型 delete p3; p3 = NULL; Person1* p1 = new Bag; p1->f(); delete p1; p1 = NULL; Person2* p2 = new Bag; p2->a(); delete p2; p2 = NULL; return 0; }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45