欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

C語言是面向過程的語言,而C++是面向對象的過程。

什么是面向對象和面向過程?

面向過程就是分析解決問題的步驟,然后用函數把這些步驟一步一步的進行實現,在使用的時候進行一一調用就行了,注重的是對于過程的分析。面向對象則是把構成問題的事進行分成各個對象,建立對象的目的也不僅僅是完成這一個個步驟,而是描述各個問題在解決的過程中所發(fā)生的行為。

面向對象和面向過程的區(qū)別?

  • 面向過程的設計方法采用函數來描述數據的操作,但將函數與操作的數據進行分離開來。
  • 面向對象的設計方法是將對象和數據進行封裝起來成為一個整體。
  • 面向過程以設計步驟為過程,后期難以維護。
  • 面向對象設計以數據為中心,數據相對與功能來說具有較強的穩(wěn)定性更加易于維護。

面向對象的三大特征

封裝:

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

繼承:

繼承機制是面向對象程序設計使代碼進行復用的最重要的手段,他允許程序員在保證類原有類特性的基礎上進行擴展來增加功能。這樣新產生的類就被稱為派生類,繼承就可以表現面向對象機制的的層次結構。

多態(tài):

多態(tài)簡單點說就是“一個接口,多種實現”,就是同一種事物表現出的多種形態(tài)。多態(tài)在面向對象語言中是指:接口多種的不同實現方式。也就是復用相同接口,實現不同操作。

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

動態(tài)多態(tài)實現的條件:

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

2>、實現多態(tài)的兩個條件:虛函數的重寫;父類的指針或者引用調用重寫的虛函數。

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

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

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

C模擬實現多態(tài)

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

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

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

class A
{
public:
  virtual void fun()//虛函數實現
  {
    cout << "Base A::fun() " << endl;
  }
};

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

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

  A* pa = &a;//父類指針指向父類對象
  pa->fun();//調用父類的函數

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

c語言實現多態(tài)

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

//C實現動態(tài),用到函數指針

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

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

//子類
struct Derived
{
  Base _b;//在子類中定義一個基類的對象即可實現對父類的繼承
};


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

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

  b._f = FunB;//父類對象調用父類同名函數
  d._b._f = FunD;//子類調用子類的同名函數

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

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

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • c語言中缺省參數的類型總結

    c語言中缺省參數的類型總結

    在本篇文章里小編給大家整理了一篇關于c語言中缺省參數的類型總結內容,有興趣的朋友們可以跟著學習參考下。
    2021-09-09
  • C語言實現翻譯功能

    C語言實現翻譯功能

    這篇文章主要為大家詳細介紹了C語言實現簡單的翻譯功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • c++中map的基本用法和嵌套用法實例分析

    c++中map的基本用法和嵌套用法實例分析

    這篇文章主要介紹了c++中map的基本用法和嵌套用法,以實例形式分析了map容器的基本使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C++ 隨機數與隨機種子數的實例

    C++ 隨機數與隨機種子數的實例

    這篇文章主要介紹了C++ 隨機數與隨機種子數的實例的相關資料,需要的朋友可以參考下
    2017-07-07
  • 詳談全排列next_permutation() 函數的用法(推薦)

    詳談全排列next_permutation() 函數的用法(推薦)

    下面小編就為大家?guī)硪黄斦勅帕衝ext_permutation() 函數的用法(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • C++實現截圖截屏的示例代碼

    C++實現截圖截屏的示例代碼

    本文主要介紹了C++實現截圖截屏的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C++實現LeetCode(96.獨一無二的二叉搜索樹)

    C++實現LeetCode(96.獨一無二的二叉搜索樹)

    這篇文章主要介紹了C++實現LeetCode(96.獨一無二的二叉搜索樹),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++類的構造與析構特點及作用詳解

    C++類的構造與析構特點及作用詳解

    本文章將會可能會涉及到匯編的知識,不過沒有關系,我會講的盡量通俗易懂;另外本篇文章開始前,建議了解下什么是函數重載,這個概念很簡單的--有相同的函數名,但參數列表不相同的函數,就是函數重載
    2022-10-10
  • C語言實現簡單學生成績管理系統(tǒng)項目

    C語言實現簡單學生成績管理系統(tǒng)項目

    這篇文章主要為大家詳細介紹了C語言實現簡單學生成績管理系統(tǒng)項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C++中頭文件與源文件的作用詳解

    C++中頭文件與源文件的作用詳解

    這篇文章主要給大家介紹了關于C++中頭文件與源文件的作用的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05

最新評論