物件成員的宣告前加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型別時,該成員變數就是類的靜態變數,屬於類的所有例項。也就是說類的靜態變數是類的所有該類例項的全域性變數。靜態成員變數的初始化,與其他變數的初始化很不一樣,靜態成員需要在類外初始化,形式如下 靜態變數的型別 類名 類的靜態成員變數名 初始化...