C++ 11 新特性(十四)C++类
(一)綜述:類是我們自己定義的數據類型
設計時要考慮的角度:
(二)explicit
首先, C++中的explicit關鍵字只能用于修飾只有一個參數的類構造函數, 它的作用是表明該構造函數是顯示的, 而非隱式的, 跟它相對應的另一個關鍵字是implicit, 意思是隱藏的,類構造函數默認情況下即聲明為implicit(隱式).
(三) inline const mutable this static
在類定義中實現成員函數inline
class pro { public://類內inlineint GetNum(){return num1 + num2;} private:int num1;int num2; };(四)成員函數末尾加const,告訴系統這個成員函數不會修改對象里任何成員變量的值等
const 定義的類對象只能調用const結尾的成員函數;末尾const成員函數,可以被const對象和非const成員調用
#include<iostream> using namespace std;class A { public:void init(int num){a = num;} protected:int a;};int main() {const A aa;aa.init(100); }(五)mutable
使用mutable修飾的內容,永遠處于可被修改的狀態。
class A { public:void init(int num)const {a = num;} protected:mutable int a;};(六)返回自身對象的引用,this
class A { public:A& init(int num){this->a = num;return *this;} protected:int a;};編譯器負責把這個對象的地址(&class)傳遞給成員函數中一個隱藏的this形參;在系統角度看來,任何對類成員直接訪問都被看作成為是通過this做隱式調用的。
(七)static成員
class A { public:A() {};~A() {};static int num ;//只聲明了,但是沒有分配內存static int getnum(){return num;}}; int A::num = 0;//分配內存并且類外初始化int main() {A aa;aa.num = 100;cout << A::num << endl;cout << A::getnum() << endl;}static的特點:(可以修飾成員變量和成員方法)
? ? ? ? ?1.隨著類的加載而加載。
? ? ? ? ?2.優先于對象存在。
? ? ? ? ?3.被類的所有對象共享。(判斷是否用static修飾,只需要看其是否被所有對象共享)
? ? ? ? ?4.可以用對象名調用也可以直接通過類名調用。
? ? ? ? ?5.static修飾的內容與類相關稱之為類變量,非靜態修飾的內容稱之為實例變量。
static使用注意事項:
? ? ? ? 1.靜態方法中沒有this關鍵字。(靜態修飾的內容是隨著類的加載而加載,this隨著對象的創建而存在,靜態修飾的內容比對象先存在)。
? ? ? ? 2.靜態方法只能訪問靜態的成員變量和靜態的成員方法
? ? ? ? ? ? ? ? ? 靜態方法:
? ? ? ? ? ? ? ? ? ? ? ?成員變量:只能訪問靜態變量。
? ? ? ? ? ? ? ? ? ? ? ?成員方法:只能訪問靜態成員方法。
? ? ? ? ? ? ? ? ?非靜態方法:
? ? ? ? ? ? ? ? ? ? ? ? 成員變量:即可以訪問靜態變量又可以訪問非靜態變量。
? ? ? ? ? ? ? ? ? ? ? ? 成員方法:既可以訪問靜態的方法又可以訪問非靜態的成員方法。
? ? ? ? ?靜態只能訪問靜態,非靜態可以訪問一切。
靜態變量和成員變量的區別:
? ? ? ? ? 1.所屬不同:
? ? ? ? ? ? ? ? ?靜態變量:屬于類,類變量。
? ? ? ? ? ? ? ? ?成員變量:屬于對象,實例變量
? ? ? ? ?2.存儲位置不同
? ? ? ? ? ? ? ? ?靜態變量:方法區的靜態區。
? ? ? ? ? ? ? ? ?成員變量:堆內存。
? ? ? ? 3.生命周期不同
? ? ? ? ? ? ? ? 靜態變量:隨著類的加載而加載,隨著類的消失而消失。
? ? ? ? ? ? ? ? 成員變量:隨著對象的創建而存在,隨著對象的消失而消失。
? ? ? ?4.調用方式不同
? ? ? ? ? ? ? ? 靜態變量:可以通過對象名調用也可以直接通過類名調用。
? ? ? ? ? ? ? ? 成員變量:只能通過對象名調用。
?
總結
以上是生活随笔為你收集整理的C++ 11 新特性(十四)C++类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于鹿的网名74个
- 下一篇: vs 不能自动 析构函数_深入理解C++