如果您提供了析構函式,複製建構函式或複製賦值運算子
那麼移動建構函式和移動賦值運算子將不會被自動提供
如果您提供了移動建構函式或移動賦值運算子
那麼複製建構函式和複製構造運算子將不會被自動提供
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...