程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++——類數據成員和類成員函數

C++——類數據成員和類成員函數

編輯:C++入門知識

C++——類數據成員和類成員函數

C++除了有屬於對象的成員——對象成員(或實例成員),還有屬於類本身的一種成員,稱之為類成員。

使用關鍵字static就可以創建一個類成員。

一、 類數據成員

static數據成員在類聲明的內部聲明,在任何程序塊之外定義(注意:不能在構造函數中初始化)。

??
??class Task
{
public:
     //……

private:
	static int n;
};
int Task::n = 0; //定義(初始化)時不受private和protected訪問限制.



初始化為0不是必須,在任何程序塊之外定義的變量都自動初始化為0

注:不要試圖在頭文件中定義(初始化)靜態數據成員。在大多數的情況下,這樣做會引起重復定義這樣的錯誤。即使加上#ifndef #define #endif或者#pragma once也不行。

static數據成員不會影響該類及其對象的sizeof.

\

二、 類成員函數

static成員函數只能訪問其他的static成員(類數據成員和類成員函數)。

類成員函數可以為inline也可以為非inline

對於static成員的訪問,可以通過對象訪問,也能通過類來訪問。

??
class A
{
public:
	static int x;  //此處只為說明
	static void Getx();
};


int main()
{
	A a;
	a.Getx();  //通過對象訪問
	A::Getx(); //通過類訪問
	int m = a.x;
	int n = A::x;
	return 0;
}


三、 在成員函數中定義static變量

如果成員函數中定義了static變量,則該類的所有對象調用該成員函數時將共享這個靜態變量

\

本例在成員函數m中定義了一個static變量s,由於s定義在程序塊內,它擁有程序塊范圍,因此它只能在m內部訪問。每調用m一次,s就會相應地增加一次。又因為m是C的成員函數,所以,C的所有對象都共享這個靜態局部變量。這樣,對m的每一次調用訪問的都是同一個s。相反,對於非靜態局部變量x來說,每個C對象都擁有一個x。所以,在main中第一次調用c1.m()將s從0增加到1,調用c2.m()將s從1增加到2,第二次調用c2.m()將s從2增加到3。


						

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved