Modern C 之物件導向

2022-07-24 05:06:15 字數 2267 閱讀 8124

c++11引入了delegate constructor的概念,用於在乙個類中讓乙個建構函式使用另外乙個建構函式,從而用來簡化初始化的**

talk is cheap, show me the code.下面定義基類base,裡面含有兩個變數並且含有兩個建構函式,其中帶引數的建構函式會呼叫不帶參的建構函式,完整示例**如下所示:

class base

// 使用delegete base方法,用來簡化code

base(int value) :base()

};

乙個類只能初始化它的的直接基類,也就是說乙個類只能繼承直接基類的建構函式。類不能繼承預設、拷貝和移動建構函式。在傳統的c++中,如果乙個類要繼承基類的建構函式,那麼需要將引數乙個個傳遞,效率較低。在c++11中,可以使用using宣告語句直接繼承基類的建構函式

class subbase :public base

;

在傳統c++中,很有可能會出現重寫虛函式的操作,乙個簡單的示例**如下所示:

struct base ;

// struct subbase :base ;

從上面的**中分析可以得知,subbase中的foo有可能是用來過載basefoo函式,又或者是直接新寫乙個名字相同的函式。但是這樣會存在乙個問題:如果basefoo函式被刪除了,那麼subbase裡的foo函式就不再是重寫虛函式了,而是乙個普通的函式了,這種問題就很容易迷惑自己。

為了解決上面的迷惑行為,c++11引入了兩個關鍵字overridefinal,用於解決上面所說的問題。

如果需要重寫乙個函式,那麼可以使用override關鍵字進行宣告,之後編譯器會判斷父類中是否會有對應的虛函式,沒有的話則無法編譯通過

示例**:

struct overbase

;struct suboverbase :overbase

;

final關鍵字用來限制類不在被繼承或者禁止過載虛函式

struct finalbase; 

struct subfinalbase1 final :finalbase    // legal statement;/*

* 非法定義示例

struct subfinalbase2 :subfinalbase1    // 非法定義,類使用final關鍵字限制繼承

;struct subfinalbase3 :finalbase

;*/

在傳統c++中,如果使用者在程式中沒有顯示寫建構函式,那麼編譯器會自己生成預設的建構函式、拷貝建構函式和析構函式等,並且也會為所有類定義new delete的操作。

但有的時候也會有一些特定的需求,例如精確控制預設建構函式的產生與否。打個比方,當乙個類不能被複製的時候,那麼類中的拷貝建構函式和一些操作都必須被宣告位private。如果我們嘗試去使用這些未定義的方法,那麼將會引起錯誤;

並且,當使用者定義了建構函式的時候,那麼類的預設建構函式是不會存在的,但是如果我們需要類必須存在乙個預設構造,這個時候就非常尷尬,因為兩者不能並存啊。

為了解決上面所說的情形,c++11提供了下面的解決辦法,具體使用參見示例**:

class magic

;

傳統c++中列舉型別不是型別安全的,並且是當作整形來處理的,因此可以將兩個不同的列舉型別用來比較大小。並且在不同的列舉型別中,裡面的列舉變數名字也不能一樣,因為作用域是一樣的。c++11引入了enum class或者enum struct來提高列舉型別的使用率。

enum class new_enum : unsigned int

;

java之物件導向

類是用於描述同一型別的物件的乙個抽象。類中定義了這一類物件所具有的靜態和動態屬性 靜態屬性 成員變數 動態屬性 方法 1 類可以看成是一類物件的模板,物件可以看成該類的乙個具體例項 2 首先必須定義類才能有物件 說到類,就不得不說構造其構造方法了 在new乙個物件是,呼叫的就是類中的構造方法 列如p...

static之物件導向

一 靜態資料成員子 includeusing namespace std class point int point num 0 定義靜態資料成員 int main 對於類的非靜態資料成員,每個類物件都有自己的拷貝。而對於靜態資料成員被當作是類的成員。就像上述例子中,雖然定義了4個物件,但是靜態資料...

Lua Lua之物件導向

萬物皆值 函式也是一種值 正式這個特點我們可以使用 table 陣列 構建乙個包含有屬性和方法的 table,這個table 就可以被我們當做物件來使用 tbl1 tbl2 setmetatable tbl2,print tbl2.a 輸出1metastable可以用來改變table的行為,如 in...