最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言模式實(shí)現(xiàn)C++繼承和多態(tài)的實(shí)例代碼

 更新時(shí)間:2017年07月28日 14:16:25   作者:name_文強(qiáng)  
本篇文章主要介紹了C語言模式實(shí)現(xiàn)C++繼承和多態(tài)的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

這個(gè)問題主要考察的是C和C++的區(qū)別,以及C++中繼承和多態(tài)的概念。

C和C++的區(qū)別

C語言是面向過程的語言,而C++是面向?qū)ο蟮倪^程。

什么是面向?qū)ο蠛兔嫦蜻^程?

面向過程就是分析解決問題的步驟,然后用函數(shù)把這些步驟一步一步的進(jìn)行實(shí)現(xiàn),在使用的時(shí)候進(jìn)行一一調(diào)用就行了,注重的是對(duì)于過程的分析。面向?qū)ο髣t是把構(gòu)成問題的事進(jìn)行分成各個(gè)對(duì)象,建立對(duì)象的目的也不僅僅是完成這一個(gè)個(gè)步驟,而是描述各個(gè)問題在解決的過程中所發(fā)生的行為。

面向?qū)ο蠛兔嫦蜻^程的區(qū)別?

  • 面向過程的設(shè)計(jì)方法采用函數(shù)來描述數(shù)據(jù)的操作,但將函數(shù)與操作的數(shù)據(jù)進(jìn)行分離開來。
  • 面向?qū)ο蟮脑O(shè)計(jì)方法是將對(duì)象和數(shù)據(jù)進(jìn)行封裝起來成為一個(gè)整體。
  • 面向過程以設(shè)計(jì)步驟為過程,后期難以維護(hù)。
  • 面向?qū)ο笤O(shè)計(jì)以數(shù)據(jù)為中心,數(shù)據(jù)相對(duì)與功能來說具有較強(qiáng)的穩(wěn)定性更加易于維護(hù)。

面向?qū)ο蟮娜筇卣?

封裝:

對(duì)于封裝來說就是數(shù)據(jù)與具體操作實(shí)現(xiàn)的代碼都放在某個(gè)對(duì)象的內(nèi)部,使這些代碼的具體細(xì)節(jié)不被外界發(fā)現(xiàn),只留下一些接口供外部來使用,而不能一任何的形式來對(duì)象內(nèi)部的實(shí)現(xiàn)。使用封裝能夠隱藏具體的實(shí)現(xiàn)的細(xì)節(jié),使代碼更加易于維護(hù)并且保證了系統(tǒng)的安全性。

繼承:

繼承機(jī)制是面向?qū)ο蟪绦蛟O(shè)計(jì)使代碼進(jìn)行復(fù)用的最重要的手段,他允許程序員在保證類原有類特性的基礎(chǔ)上進(jìn)行擴(kuò)展來增加功能。這樣新產(chǎn)生的類就被稱為派生類,繼承就可以表現(xiàn)面向?qū)ο髾C(jī)制的的層次結(jié)構(gòu)。

多態(tài):

多態(tài)簡(jiǎn)單點(diǎn)說就是“一個(gè)接口,多種實(shí)現(xiàn)”,就是同一種事物表現(xiàn)出的多種形態(tài)。多態(tài)在面向?qū)ο笳Z言中是指:接口多種的不同實(shí)現(xiàn)方式。也就是復(fù)用相同接口,實(shí)現(xiàn)不同操作。

C++多態(tài)支持兩種多態(tài)性,編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。編譯時(shí)多態(tài)是通過重載函數(shù)來實(shí)現(xiàn)的,運(yùn)行時(shí)多態(tài)是通過虛函數(shù)來實(shí)現(xiàn)的。靜態(tài)多態(tài):編譯器在編譯期間完成,編譯器根據(jù)函數(shù)實(shí)參的類型(可能會(huì)隱式類型轉(zhuǎn)換),可推斷出要調(diào)用哪個(gè)函數(shù),如果有對(duì)應(yīng)的函數(shù)就調(diào)用相應(yīng)的函數(shù),否則就報(bào)一個(gè)編譯錯(cuò)誤。動(dòng)態(tài)多態(tài):在函數(shù)執(zhí)行期間(非編譯期)判斷所引用對(duì)象的實(shí)際類型,根據(jù)實(shí)際類型的調(diào)用相應(yīng)的方法。使用virtual關(guān)鍵字修飾類的成員函數(shù),指明該函數(shù)為虛函數(shù),派生類需要重新實(shí)現(xiàn),編譯器將實(shí)現(xiàn)動(dòng)態(tài)綁定。

動(dòng)態(tài)多態(tài)實(shí)現(xiàn)的條件:

1>、使用場(chǎng)景:父類的指針或者引用指向父類或者子類的對(duì)象(由賦值兼容規(guī)則決定);

2>、實(shí)現(xiàn)多態(tài)的兩個(gè)條件:虛函數(shù)的重寫;父類的指針或者引用調(diào)用重寫的虛函數(shù)。

3>、若父類中的成員函數(shù)加上virtual關(guān)鍵字,則子類中重寫的該函數(shù)默認(rèn)virtual,可以不指定,但是一般加上;

重寫:子類重寫父類的虛函數(shù),要求函數(shù)名稱,函數(shù)參數(shù),返回值完全一樣(協(xié)變除外);

總的來說:封裝可以隱藏實(shí)現(xiàn)細(xì)節(jié)包括包含私有成員,使得代碼模塊增加安全指數(shù);繼承可以擴(kuò)展已存在的模塊,為了增加代碼的復(fù)用性;多態(tài)則是為了保證類在繼承和派生的時(shí)候,類的實(shí)例被正確調(diào)用,實(shí)現(xiàn)了接口的重用

C模擬實(shí)現(xiàn)多態(tài)

C++中的多態(tài)

我們知道的是在C++中會(huì)維護(hù)一張?zhí)摵瘮?shù)表,根據(jù)賦值兼容規(guī)則,我們知道父類的指針或者引用是可以指向子類對(duì)象的。如果一個(gè)父類的指針或者引用調(diào)用父類的虛函數(shù)則該父類的指針會(huì)在自己的虛函數(shù)表中查找自己的函數(shù)地址,如果該父類對(duì)象的指針或者引用指向的是子類的對(duì)象,而且該子類已經(jīng)重寫了父類的虛函數(shù),則該指針會(huì)調(diào)用子類的已經(jīng)重寫的虛函數(shù)。

//c++中的多態(tài)

class A
{
public:
  virtual void fun()//虛函數(shù)實(shí)現(xiàn)
  {
    cout << "Base A::fun() " << endl;
  }
};

class B:public A
{
public:
  virtual void fun()//虛函數(shù)實(shí)現(xiàn),子類中virtual關(guān)鍵字可以沒有
  {
    cout << "Derived B::fun() " << endl;
  }
};

void Test1()
{
  A a;//基類對(duì)象
  B b;//派生類對(duì)象

  A* pa = &a;//父類指針指向父類對(duì)象
  pa->fun();//調(diào)用父類的函數(shù)

  pa = &b; //父類指針指向子類對(duì)象,多態(tài)實(shí)現(xiàn)
  pa->fun();//調(diào)用派生類同名函數(shù)
}

c語言實(shí)現(xiàn)多態(tài)

我們知道在C語言中是沒有class類這個(gè)概念的,但是有struct結(jié)構(gòu)體,我們可以考慮使用struct來模擬;但是在C語言的結(jié)構(gòu)體內(nèi)部是沒有成員函數(shù)的,如果實(shí)現(xiàn)這個(gè)父結(jié)構(gòu)體和子結(jié)構(gòu)體共有的函數(shù)呢?我們可以考慮使用函數(shù)指針來模擬。但是這樣處理存在一個(gè)缺陷就是:父子各自的函數(shù)指針之間指向的不是類似C++中維護(hù)的虛函數(shù)表而是一塊物理內(nèi)存,如果模擬的函數(shù)過多的話就會(huì)不容易維護(hù)了。

//C實(shí)現(xiàn)動(dòng)態(tài),用到函數(shù)指針

typedef void(*FUN)();//重定義一個(gè)函數(shù)指針類型

//父類
struct Base 
{
  FUN _f;
};

//子類
struct Derived
{
  Base _b;//在子類中定義一個(gè)基類的對(duì)象即可實(shí)現(xiàn)對(duì)父類的繼承
};


void FunB()
{
  printf("%s\n", "Base::fun()");
}
void FunD()
{
  printf("%s\n", "Derived::fun()");
}

void Test2()
{
  Base b;//父類對(duì)象
  Derived d;//子類對(duì)象

  b._f = FunB;//父類對(duì)象調(diào)用父類同名函數(shù)
  d._b._f = FunD;//子類調(diào)用子類的同名函數(shù)

  Base *pb = &b;//父類指針指向父類對(duì)象
  pb->_f();

  pb = (Base *)&d;//讓父類指針指向子類的對(duì)象,由于類型不匹配所以要進(jìn)行強(qiáng)轉(zhuǎn)
  pb->_f();

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言入門篇--變量[定義,初始化賦值,外部聲明]

    C語言入門篇--變量[定義,初始化賦值,外部聲明]

    本篇文章是c語言基礎(chǔ)篇,本文對(duì)初識(shí)c語言的變量、變量的定義、初始化與賦值、變量的分類、含義、外部聲明做了簡(jiǎn)要的描述,幫助大家快速入門c語言的世界,更好的理解c語言
    2021-08-08
  • 淺析C語言字中的符串格式化顯示

    淺析C語言字中的符串格式化顯示

    以下是對(duì)C語言字中的符串格式化顯示進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • MFC之ComboBox控件用法實(shí)例教程

    MFC之ComboBox控件用法實(shí)例教程

    這篇文章主要介紹了MFC之ComboBox控件用法,包括了ComboBox控件常見的各類用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • C語言中的各種文件讀寫方法小結(jié)

    C語言中的各種文件讀寫方法小結(jié)

    這篇文章主要介紹了C語言中的各種文件讀寫方法小結(jié),是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-07-07
  • 一起來了解一下C++的結(jié)構(gòu)體?struct

    一起來了解一下C++的結(jié)構(gòu)體?struct

    這篇文章主要為大家詳細(xì)介紹了C++的結(jié)構(gòu)體struct,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • c++實(shí)現(xiàn)哈希桶的步驟

    c++實(shí)現(xiàn)哈希桶的步驟

    本文主要介紹了c++實(shí)現(xiàn)哈希桶的步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C語言實(shí)現(xiàn)英文單詞助手

    C語言實(shí)現(xiàn)英文單詞助手

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)單詞小助手,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 十個(gè)C++惡搞朋友的代碼合集

    十個(gè)C++惡搞朋友的代碼合集

    這篇文章主要為大家整理了十個(gè)C++中可以惡搞朋友的代碼合集(注意!從第五個(gè)開始為危險(xiǎn)/永久性程序,請(qǐng)慎重使用),感興趣的小伙伴可以收藏一下
    2023-02-02
  • C語言在屏幕上輸出楊輝三角

    C語言在屏幕上輸出楊輝三角

    這篇文章主要介紹了在屏幕上輸出楊輝三角的方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • c語言多線程編程使用示例

    c語言多線程編程使用示例

    這篇文章主要介紹了c語言多線程編程使用示例,需要的朋友可以參考下
    2014-04-04

最新評(píng)論

阳泉市| 买车| 和田市| 大安市| 青龙| 治县。| 大石桥市| 沙田区| 蕲春县| 读书| 义乌市| 班玛县| 高安市| 南川市| 新和县| 康平县| 黎川县| 商河县| 赤壁市| 大竹县| 永和县| 金山区| 林甸县| 龙江县| 黄山市| 江永县| 安阳市| 灌云县| 朝阳县| 通州区| 瑞丽市| 麦盖提县| 基隆市| 温泉县| 兴仁县| 永州市| 滕州市| 北川| 仁寿县| 谷城县| 牙克石市|