C 11新增的類功能

2021-08-22 18:02:20 字數 1856 閱讀 5411

如果您提供了析構函式,複製建構函式或複製賦值運算子

那麼移動建構函式和移動賦值運算子將不會被自動提供

如果您提供了移動建構函式或移動賦值運算子

那麼複製建構函式和複製構造運算子將不會被自動提供

testclass();

explicit testclass(const

string & newmessage) ;

testclass(testclass && f);

testclass & operator=(testclass && f) ;

testclass(const testclass &f) = default;

testclass & operator=(const testclass &f) = default;

testclass operator+(const testclass &f) const;

void notouse() = delete;

void showobject() const;

~testclass();

運用default顯示地宣告複製建構函式和複製賦值運算子的預設版本

在使用delete關鍵字禁用函式後,呼叫nottouse方法將會被視為編譯錯誤

使用using可以讓派生類使用基類的非特殊成員函式,或是讓派生類繼承基類的建構函式

class a

a(int i, double j) : _i(i)

inline

int fn(double i)

inline

double fn(int i)

private:

int _i;

};class b: public a

b (int i):a(i)

b (double j):a(),_j(j){}

inline

double fn(int i)

private:

double _j;

};int main()

對應輸出

using b constructor

b(int)

using

aconstructor

a(int,double)

enter

theb: double fn(int)

enter the a: int fn(double)

對於基類宣告的虛方法,子類在過載時可以在引數列表後面加上override。如果宣告與基類方法不匹配,編譯器將視為錯誤

/**

* a中宣告的虛方法

**/virtual inline double fn(int i)

/*** b對a的過載

**/inline double fn(double i) override

特徵標不匹配,編譯階段出錯

using.cpp:40:19: error: 'double b::fn(double)' marked 'override', but does not override

inline double fn(double i) override{

靜態變數必須先初始化,不然就會出現未定義的引用,且類的靜態資料成員的初始化必須在類外進行

複製建構函式和複製賦值運算子

// 這是初始化,此時呼叫的是複製建構函式

testclass test3 = test1;

//test1是左值,呼叫的是複製賦值運算子

testclass test3;

test3 = test1;

C 11 類的多型

c 中類的三大特性是 繼承,封裝,多型。因為近期寫 用到了類的多型性,所以在這裡再總結一下。關於多型的定義,我是參考大佬的文章再加上自己的理解得到以下內容的,大佬鏈結在此。多型性可以簡單地概括為 乙個介面,多種方法 雖然在c 中沒有介面 inte ce 這個關鍵字的存在,但是可以通過多型來實現,多型...

C 11 新增容器 array

array 容器是 c 11 標準中新增的序列容器,簡單地理解,它就是在 c 普通陣列的基礎上,新增了一些成員函式和全域性函式。array是將元素置於乙個固定陣列中加以管理的容器。array可以隨機訪問元素,支援索引值直接訪問,用操作符或at 方法對元素進行操作,也可以使用迭代器訪問 不支援動態的新...

C 11增加的功能特性

現代c 這個術語在c 11發布後變得非常流行。這是什麼意思?首先,現代c 是一組模式和習語,旨在消除的缺點美好的 c類 如此多的c 程式設計師使用,特別是如果他們開始在c,c 程式設計11看起來更簡潔易懂的方式,這是非常重要的。c 11增加的功能特性包括 自動型別推斷 lambdas表示式 c 11...