C 手稿 類的靜態和常量成員

2021-07-04 15:19:04 字數 1923 閱讀 3422

物件成員的宣告前加static即可定義為靜態成員,靜態成員必須在宣告類的檔案中進行宣告(通常會初始化),否則鏈結錯。 訪問靜態成員可以通過類名,也可以通過物件名。

class

cperson

;int

cperson

::count=0

;cpersonp1,

&p2=p1

,*p3=

newcperson

();cout

<<

cperson

::count

<<

endl

;cout

<<

endl

;cout

<<

endl

;cout

<<

p3->

count

<<

endl

;

在c++中,藉由靜態成員變數,可以實現單例模式。首先需要將建構函式私有化,並提供獲取單例的方法。 此後還需禁止複製建構函式、禁止賦值運算子。

class

cperson

;cperson

(cperson

&){};

const

cperson

&operator=(

const

cperson

&rhs

);public

:static

person

*instance

()};

cperson

*cperson::p

=null

;

c++類是使用者定義的資料型別,也可以宣告為常量。因為方法呼叫可能會改變物件屬性, 所以常量物件只能呼叫建構函式、析構函式以及常量方法。

常量方法是不改變物件屬性的方法,在常量方法中所有屬性賦值都會產生編譯錯誤。 常量成員函式也可以在類宣告外定義,但宣告和定義都需要指定const關鍵字。

class

cperson

void

print

()};

cpersonp1;

const

cpersonp2;

p1.print

();// normalp2.

print

();// const

常量方法可以是普通方法的過載,它們擁有不同的函式簽名。常量物件只能呼叫常量方法, 而普通物件會優先呼叫普通方法,如果不存在,則呼叫同名的常量方法。

通常我們需要定義相同返回值的常量方法以及普通方法。這時我們不希望重新編寫方法的邏輯。 最先想到的方法是常量方法呼叫普通方法,然而這是c++語法不允許的。 於是我們只能用普通方法呼叫常量方法,並做相應的型別轉換:

const

char

&operator

(size_t

pos)

const

char

&operator

(size_t

pos)

*this的型別是textblock,先把它強制隱式轉換為const textblock,這樣我們才能呼叫那個常量方法。

呼叫operator(size_t) const,得到的返回值型別為const char&

把返回值去掉const屬性,得到型別為char&的返回值。

詳情見:effective c++ 筆記

C 常量成員函式的含義

在類x的非常量成員函式中,this指標的型別為x const。也就是說,它是指向非常量x的常量指標。而在類x的常量成員函式中,this的型別為const x const。也就是說,是指向常量x的常量指標。這就是常量成員函式和非常量成員函式的區別。對成員函式的this指標型別加上常量修飾符,就可以解釋...

C 中的this指標和常量成員函式

預設情況下,編譯器為類的每個成員函式提供了乙個隱式形參,該形參指向被呼叫的成員函式所在的物件。該隱式形參成為this。常量成員函式是乙個不會修改呼叫它的物件的函式。1.this指標 隱式物件形參的實際形參就是呼叫成員函式的物件的位址。因此在類的成員函式中也可以通過使用 this 表示式來訪問呼叫它的...

C 類的靜態變數成員和靜態成員函式的使用

1 類的靜態成員變數 當類的乙個成員變數被宣告為static型別時,該成員變數就是類的靜態變數,屬於類的所有例項。也就是說類的靜態變數是類的所有該類例項的全域性變數。靜態成員變數的初始化,與其他變數的初始化很不一樣,靜態成員需要在類外初始化,形式如下 靜態變數的型別 類名 類的靜態成員變數名 初始化...