c++中,類的成員變數和成員函式分開儲存。只有非靜態成員變數屬於類的物件,占用物件的記憶體空間。
注1:非靜態成員函式和靜態成員(包括靜態成員變數與靜態成員函式)均不屬於類的物件,不占用物件的記憶體空間。示例:注2:非靜態成員函式並非某個物件獨有,記憶體中僅存在乙份資料(乙份函式例項)。不同物件的某個非靜態成員函式共享同乙個函式例項,即多個同型別的物件會共用一塊**。
注3:空物件占用記憶體空間大小為
1位元組
。每個物件均具有獨一無二的記憶體位址,c++編譯器為區分不同的空物件,會為每個空物件分配1個位元組的記憶體空間。
#include
using
namespace std;
//空類
class
empty
;class
object
//靜態成員函式:不屬於類的物件,不占用物件的記憶體空間
static
void
s_func()
};intmain()
c++提供特殊的物件指標this指標
,用於區分共享的同一塊**(如非靜態成員函式)由某個物件呼叫。
this指標的特點:
(1)this指標指向被呼叫的成員函式所屬的物件(某個物件呼叫成員函式,this指標即指向該物件)。
(2)this指標是隱含在每個非靜態成員函式內的一種指標。
(3)this指標無需定義,可直接使用。
this指標的本質:this指標本質是指標常量
,等價於資料型別* const this
,即指標的指向不可修改,但指向的值可以修改。
this指標的作用:
(1)當成員變數與函式形參同名時,可使用this指標
區分,解決名稱衝突。
(2)在類的非靜態成員函式中,*this
可表示物件本身。return *this;
可返回當前物件:
①當函式以值型別返回,即返回型別為類型別
,會呼叫拷貝建構函式建立並返回當前物件的拷貝
;
②當函式以引用型別返回,即返回型別為類型別 &
,會返回當前物件本身
。
注1:this
是指向物件的指標,可通過解引用操作*this
獲取物件。注2:
this->成員屬性
等價於(*this).成員屬性
。
總結:示例:①函式中建立並返回臨時物件時,函式返回型別應為值型別即
類型別
,而不能為引用型別。原因:臨時變數在函式呼叫完畢後釋放,若返回型別為引用型別即為同乙個物件,訪問已被釋放的記憶體為非法操作;應返回值型別,建立臨時物件的拷貝並返回。
②為保證鏈式程式設計風格或呼叫的物件全域性唯一時,函式返回型別應為引用型別即
類型別 &
,而不能為值型別。原因:若返回型別為值型別,會建立當前物件的拷貝並返回,呼叫與返回的物件不是同乙個物件;應返回引用型別,保證呼叫與返回同乙個物件。
#include
using
namespace std;
class
account
//以【引用型別】返回
account&
sum1
(account a)
//以【值型別】返回
account sum2
(account a)};
intmain()
c++中,空指標可呼叫成員函式。
若成員函式中訪問成員變數時(即隱含地使用this指標
時),需進行判空處理以保證**的健壯性。
//判空**if(
this
==null
)
示例:空指標訪問成員函式
//空指標訪問成員函式
#include
using
namespace std;
class
object
//成員函式中訪問成員變數(使用this指標)
void
func()
cout << field << endl;
//訪問成員變數時,等價於 this->成員變數}}
;int
main()
常函式:成員函式的形參列表後,使用關鍵字const
修飾。
語法:返回型別 函式名() const
特點:常函式內,成員變數不可修改。
本質:成員函式後使用關鍵字const
修飾,本質相當於修飾this指標
(指標常量),則this指標
指向的值亦不可修改。
注1:常物件:物件在宣告時,使用this指標
的本質是指標常量
,等價於資料型別* const this
,即指標的指向不可修改,但指向的值可以修改。注2:普通成員函式中,
成員變數
等價於this->成員變數
,this
等價於資料型別* const this
。常函式中,
this
等價於const 資料型別* const this
,則this->成員變數
指標的指向與指向的值均不可修改。若修改常函式中的成員變數的值,則編譯器報錯:表示式必須是可修改的左值
。注3:當成員屬性宣告時,若使用
關鍵字mutable
修飾,則在常函式中仍然可以修改。
關鍵字const
修飾。
特點:
(1)常物件的成員變數不可修改;
(2)常物件只能呼叫常函式。
注1:當成員屬性宣告時,若使用示例:關鍵字mutable
修飾,則在常物件中仍然可以修改。注2:常物件不可呼叫普通成員函式,因為普通成員函式中成員屬性可修改,與常物件的成員變數不可修改相斥。否則,編譯器報錯:
物件含有與成員函式***::func()不相容的型別限定符
。
#include
using
namespace std;
class
object
/* 普通成員函式 */
void
func2()
};intmain()
C 類和物件 類和物件
c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...
C 物件和類
1,特殊的類 字串string include include using namespace std int main 類似於標準庫函式,我們不需要記住每種 類 的全部操作,只需要在使用過程中記住一些常用的操作就可以了。如果有需要的話,可以求助於相關書籍或網路 2,當我們對string進行種種操作...
C (類和物件)
類成員函式 類的成員函式指標那些把定義和原型寫在類定義內部的函式,就想類定義中的其他變數一樣。類訪問修飾符 類成員可以定義為public,private或protected。預設情況下是定義為private。建構函式 類的建構函式是一種特殊的函式,在建立乙個新物件是呼叫。析構函式 類的析構函式也是一...