C++類和對象

1.在類體中和類體外定義成員函數是有區別的:在類體中定義的成員函數爲內聯(inline)函數,在類體外定義的不是。內聯函數通常不是咱們所指望的,它會將函數調用處用函數體替代,因此我建議在類體內部對成員函數做聲明,而在類體外部進行定義,這是一種良好的編程習慣。html

2.static 成員變量編程

static 成員變量屬於類,不屬於某個具體的對象,這就意味着,即便建立多個對象,也只爲 num 分配一分內存,全部對象使用的都是這分內存中的數據。當某個對象修改了 num,也會影響到其餘對象。
static 成員變量必須先初始化才能使用,不然連接錯誤。例如:
函數

int Student::num;  //初始化

也能夠在初始化時賦初值:this

int Student::num = 10;  //初始化同時賦值

初始化時能夠不加 static,但必需要有數據類型。被 private、protected、public 修飾的 static 成員變量均可以用這種方式初始化。
注意:static 成員變量的內存空間既不是在聲明類時分配,也不是在建立對象時分配,而是在初始化時分配。
url

static 成員變量既能夠經過對象來訪問,也能夠經過類來訪問。經過類來訪問的形式爲:spa

類名::成員變量;.net

例如:指針

  1. //經過類來訪問
  2. Student::num = 10;
  3. //經過對象來訪問
  4. Student stu;
  5. stu.num = 10;

   注意:static 成員變量與對象無關,不佔用對象的內存,而是在全部對象以外開闢內存,即便不建立對象也能夠訪問。orm

  在類中,static 除了聲明靜態成員變量,還能夠聲明靜態成員函數。普通成員函數能夠訪問全部成員變量,而靜態成員函數只能訪問靜態成員變量。咱們知道,當調用一個對象的成員函數(非靜態成員函數)時,系統會把當前對象的起始地址賦給 this 指針。而靜態成員函數並不屬於某一對象,它與任何對象都無關,所以靜態成員函數沒有 this 指針。既然它沒有指向某一對象,就沒法對該對象中的非靜態成員進行訪問。能夠說,靜態成員函數與非靜態成員函數的根本區別是:非靜態成員函數有 this 指針,而靜態成員函數沒有 this 指針。由此決定了靜態成員函數不能訪問本類中的非靜態成員。htm

相關文章
相關標籤/搜索