C 11新特性之final和override

2021-10-04 03:51:22 字數 1209 閱讀 3267

在正常的編碼中,根據業務需要,派生類可以過載父類的成員函式,但是在某些場景必須只能用父類的成員函式進行操作或者父類的成員函式已經可以滿足業務需求,這個時候限定不能去過載。但是這只是乙個個人行為意識的限定,如果換人來開發肯定會不注意這一點,為了避免這樣的錯誤產生,引入了final,在基類的函式中加入final限定符,就是為了限定住不能去過載該成員函式。

#includeusing namespace std;

class abstracttype

~abstracttype() {}

virtual void func() = 0;

private:

};class base:public abstracttype

~base() {}

void func() final {}

private:

};class test :public base

~test() {}

void func()//error,派生類不能過載基類fianl限定的成員函式

};

override是與final相反存在的限定符,要求派生類中加override的成員函式必須是過載基類的函式

#includeusing namespace std;

class abstracttype

~abstracttype() {}

virtual void func() = 0;

private:

};class base:public abstracttype

~base() {}

void func(int a) {}

void funcall() const {}

private:

};class test :public base

~test() {}

void func1() override //error,基類中沒有func1()函式,但是override限定下,該函式必須是過載基類的成員函式

void func(double a) override //error,引數必須與基類保持一致

voud funcall() override {} //error, 缺少const限定符

};

final和override就是乙個好的程式設計習慣的體現,也能借助編譯器來提醒開發者父類的成員函式是否需要過載。

C 11新特性之 nullptr

我們知道在程式設計的世界裡,0有雙重的角色,可以表示整數零,也可以表示乙個空指標。在c語言中,通過預編譯巨集null,可以區分0表示的是零還是 void 0.但是,在c 的世界中,這樣是不可以的。c 中允許函式過載。例如 void foo char void foo int 如果把null定義為0,...

c 11新特性之auto

在早期版本中,auto關鍵字用來宣告具有自動儲存器的區域性變數,auto關鍵字很少被使用,除了靜態變數之外,其它的變數預設是auto的。因此,在c 11中,刪除了原有的功能,並對其重新設計,增加了auto的型別推導功能。template double add t1 a,t2 b int main i...

C 11 新特性之 lambda

這是c 11新特性介紹的第三部分,涉及到c 11這次更新中較為重要的lambda表示式。不想看toy code的讀者可以直接拉到文章最後看這部分的總結。熟悉python的程式設計師應該對lambda不陌生。簡單來說,lambda就是乙個匿名的可呼叫 塊。在c 11新標準中,lambda具有如下格式 ...