C 6 static和單例模式

2021-10-09 01:31:19 字數 2332 閱讀 4332

之前在c的面經總結中有對static進行詳細介紹,就不多介紹了,今天我們重點來介紹c++中static用法。

在類中,普通的成員方法在呼叫的時候編譯器會自動新增乙個this形參變數

普通成員方法的特點:

1、屬於類的作用域

2、呼叫該方法時需要依賴乙個物件

3、可以任意訪問類的私有成員變數

在成員變數前面加上static後,這個成員變數就是靜態的成員變數

靜態的成員變數在類內只是乙個宣告

一定要在類外進行定義和初始化

(重點)靜態成員變數不屬於物件,而是屬於類級別

在成員方法前面加上static後,這個成員方法就是靜態成員方法

靜態成員方法 ==》不會新增this形參變數

1、屬於類的作用域

2、用類名作用域來呼叫方法

3、可以任意訪問物件的私有成員,僅限於不依賴物件的成員(敲黑板)

在類中還有乙個關鍵字也可以用上就是const

常成員方法 產生==》const型別this

1、屬於類的作用域

2、呼叫依賴乙個物件,普通物件和常物件都可以

3、可以任意訪問物件的私有成員(唯讀)

//當我們定義乙個日期類和乙個學生類,我們需要知道現在定義了多少個學生物件,就可以定義乙個靜態計數成員變數和乙個靜態的列印函式

class

sdata

private

:int _year;

int _month;

int _day;};

class

students

static

void

show()

private

:char _name[20]

;int _age;

char _***;

sdata stu;

static

int _count;};

int students::_count =0;

intmain()

單例模式,屬於建立型別的一種常用的軟體設計模式。通過單例模式的方法建立的類在當前程序中只有乙個例項。

讓類只能例項化乙個物件

1、遮蔽生成物件的的介面

建構函式放在private

2、提供介面來生成唯一物件

1、不能生成類型別的方式返回

2、static

單例模式有兩種模式:

//懶漢模式:物件使用的時候才生成唯一物件

//餓漢模式:物件在使用之前已經生成

說的簡單一點就是,乙個類只能例項化乙個物件

實現思路:把建構函式設計為私有函式,然後由靜態成員方法呼叫

//懶漢模式

class

rector

return pre;

}private

:rector

(const

char

*name,

int age,

bool ***)

char

*mname;

int mage;

bool m***;

static rector *pre;

//標識唯一的的物件是否生成};

rector* rector::pre =

null

;int

main()

我們會發現,放第一次呼叫之後,其他呼叫皆無任何作用。

//餓漢模式

static rector*

getinstance

(const

char

*name,

int age,

bool ***)

private

:rector

(const

char

*name =

null

,int age =19,

bool *** =

false

)char

*mname;

int mage;

bool m***;

static rector *pre;

//標識唯一的的物件是否生成};

rector* rector::pre =

newrector

("ahadsa",5

,true);

intmain()

static和單例設計模式

static關鍵字的使用 static 靜態的 static可以用來修飾屬性,方法,塊,內部類 使用static修飾屬性 靜態變數 static修飾屬性說明 靜態變數隨著類的載入而載入 靜態的變數載入要早於物件的建立 由於類只會載入一次,則靜態變數在記憶體中也只會存在乙份 存在方法區的靜態域中。st...

C 回顧之static與單例模式

單例模式是應用最多的一種設計模式,它要求每個類有且只能有乙個例項物件,所以用c 設計乙個單例模式的方法如下 1 建構函式宣告為私有 這樣就保證了不能隨意構造乙個物件 2 將拷貝建構函式與等號運算子宣告為私有,並不提供他們的實現 即禁止物件被拷貝。3 在類中宣告乙個靜態的全域性訪問介面 4 宣告乙個靜...

基於Static的設計模式 單例模式

所謂類的單例設計模式,就是採取一定的方法保證在整個的軟體系統中,對 某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法。如果我們要讓類在乙個虛擬機器中只能產生乙個物件,我們首先必須將類的構 造器的訪問許可權設定為private,這樣,就不能用new操作符在類的外部產生 類的物件了,但...