本片博客是作者在學習c++的過程中的筆記記錄,希望和各位讀者一起學習交流
靜態成員變量成員函數
- 靜態成員變量
- 定義靜態成員變量
關鍵字static可以用於說明一個類的成員,靜態成員提供了一個同類對象的共享機制
把一個類的成員說明爲static時,這個類無論有多少個對象被創建,這些對象共享這個static成員
靜態成員屬於類,它不是對象成員
用法:
- 使用靜態成員變量
當靜態成員變量是public屬性的時候,可以使用類名或者對象來直接調用,類調用的時候時要用“::”來調用,對象調用的時候要用“.”來調用
當靜態成員變量是private屬性的時候,只能通過對象調用相應的成員函數來使用
- 定義靜態成員變量
- 靜態成員函數
- 概念
靜態成員函數用關鍵字staic進行修飾
在類外調用靜態成員函數的時候,用“類名::”做限定詞或者通過對象進行調用 - 在靜態成員函數中能使用靜態成員變量,但是不能使用普通成員變量。
原因:如果在靜態成員函數中使用普通變量的話,那樣就不能確定這個普通變量屬於哪個對象,因此會發生錯誤
- 概念
C++面向對象模型初探
- c++對象模型可以概括爲兩部分:
- 語言中直接支持面向對象程序設計的部分,主要涉及如構造函數、析構函數、虛函數、繼承(單繼承、多繼承、虛繼承)、多態等。
- 對於各種支持的底層實現機制
在c語言中,“數據”和“處理數據的操作(函數)”是分開來聲明的,也就是說,語言本身並沒有支持“數據和函數”之間的關聯性。在c++中,通過抽象數據類型(abstract data type,ADT),在類中定義數據和函數,來實現數據和函數的綁定
概括的說,c++類中有兩種成員數據:static、nonstatic;三種成員函數:static、nonstaitc、virtual
-
編譯器對屬性和方法的處理機制
c++類中的成員變量和成員函數是分開存儲的-
成員變量:
普通成員變量:存儲於對象中,與struct變量有相同的內存佈局和字節對齊方式
靜態成員函數:存儲於全局數據區中 -
成員函數:
存儲於代碼段中 -
總結:
c++類對象中的成員變量和成員函數是分開存儲的
c++中類的普通成員函數都隱式包含一個指向當前對象的this指針
靜態成員函數不包括指向具體對象的指針,普通成員函數包括一個指向具體對象的指針
-
-
this指針
this指針是指向對象自己本身的一個指針
若方法的形參的名字和對象的屬性的名字相同,則通過this指針來解決 -
const的修飾
eg:class Test{
public:
void ope(int a)const
{
;
}
private:
int m_a;
};
這裏的const修飾的是this指針指向的內存空間,表示this指針指向的內存空間不能進行修改,this指針本省就是不可以進行修改的,因爲this指針的類型是:Test * const ,說明this指針是一個常指針。 -
全局函數PK成員函數
- 全局函數轉化成成員函數,通過this指針隱藏左操作數
Test add(Test &t1,Test &t2)===》》》 Test add(Test &t2) - 成員函數轉換成全局函數,多一個參數
void print()===》》》void add(Test *pthis) - 函數返回元素和返回引用
函數返回引用是返回對象本身,即*this
Test &add(Test &t2);
返回返回元素是返回一個匿名對象
Test add(Test &t2);
- 全局函數轉化成成員函數,通過this指針隱藏左操作數
友元函數、友元類
- 友元函數(破壞了類的封裝性)
- 類中通過使用關鍵字friend 來修飾友元函數,但該函數並不是類的成員函數,其聲明可以放在類的私有部分,也可放在共有部分。友元函數的定義在類體外實現,不需要加類限定
- 一個類中的成員函數可以是另外一個類的友元函數,而且一個函數可以是多個類友元函數
- 友元函數可以訪問類中的私有成員和其他數據,但是訪問不可直接使用數據成員,需要通過對對象進行引用
- 友元函數在調用上同一般函數一樣,不必通過對對象進行引用
格式:
friend 類型 函數名(形式參數);
- 友元類
- 友元類的所有成員函數都是另一個類的友元函數,都可以訪問另一個類中的隱藏信息(包括私有成員和保護成員)
- 當希望一個類可以存取另一個類的私有成員時,可以將該類聲明爲另一類的友元類
格式:
friend class 類名;