C 動態特性

2021-05-26 21:13:35 字數 1091 閱讀 2264

在絕大多數情況下,程式的功能是在編譯的時候就確定下來的,我們稱為靜態特性。反之,如果程式的功能是在執行時刻才確定下來的,則稱為動態特性。

動態特性是物件導向語言最強大的功能之一,因為它在語言層面上支援程式的可擴充套件性,而可擴充套件性是軟體設計追求的重要目標之一。

c++虛函式、抽象基類、動態繫結、多型構成了出色的動態特性。

1.虛函式

假定幾何形狀的基類為shape,其派生類有circle、rectangle、ellipse等,每個派生類都能夠繪製自己所代表的形狀。不管派生類的形狀如何,我們希望用統一的方式來呼叫繪製函式,最好是使用shape定義的介面函式draw(),並讓程式在執行是動態地確定應該使用哪乙個派生類的draw()函式。

為了使這種行為可行,我們把基類shape中的函式draw()宣告為虛函式,然後在派生類中重新定義draw()使之繪製正確的形狀,這種方法叫覆蓋,虛函式的宣告方法是在基類的函式原型之前加上關鍵之virtual。

一旦類的乙個函式被宣告為虛函式,那麼其派生類的對應函式也自動成為虛函式,這樣一級一級傳遞下去。

2.抽象基類

當我們把類看成是一種資料型別時,通常會認為該類肯定是要被例項為乙個或多個物件的。但是在很多情況下,定義那些不能例項化出物件的類也是很有用的,這種類就稱為抽象類。抽象類的唯一目的就是讓其派生類繼承並實現它的介面方法,因此它通常也被稱為抽象基類。

如果將基類的虛函式宣告為春虛函式,那麼該類就被定義為了抽象基類。純虛函式是在宣告時將其「初始化」為0的函式,例如:

class shape {                                  //shape是抽象基類

public:

virtual void draw(void)=0;  //draw()為純虛函式

}抽象基類shape的純虛函式draw()根本不知道自己應該怎麼繪製出乙個「形狀」來,具體功能必須有代表具體形狀的派生類對應的draw()函式來實現。

我們知道,函式名就是函式的位址,將乙個函式初始化為0意味著函式的位址將為0,這就是在告訴編譯器,不要為該函式編址,從而阻止該類的例項化行為。

抽象基類的主要用途是「介面與實現分離」;不僅要把資料成員(資訊)隱藏起來,而且還要把實現完全隱藏起來,只留一些介面給外部呼叫。

C 4 0 新特性 動態查詢

visual studio 2010 已經離我們越來越近,關於 c 4.0 的 break changes 也已經全部成型。在 c 4.0 發布時,我們將能夠看到如下的新特性 1 動態查詢 2 命名引數 3 可選引數和預設值 4 covariance 和 contra variance 5 其他 n...

python 動態特性學習

python是一門動態語言,可以動態的建立類。這裡主要學習exce,eval,execfile,complie.exce 是跟while,for一樣的python語句 eval,excefile,complie 是python的內建函式 1 exce 可以執行儲存在字串中的python exec p...

動態規劃題目特性

1 此類問題是乙個由多決策產生最優值的最優化問題.決策 是指在問題可以按時間順序分成若干相互聯絡的階段,每乙個階段都需要做出決策,產生最優值,整個求解過程中的決策是乙個決策序列.最優化問題 眾所周知在資訊學之中有四大類問題 判定性問題 構造性問題 計數問題和最優化問題。其中最優化問題遇到的較多,而最...