this
this即位隱式的指標,指向呼叫者本身(物件的位址即為this)
所有的成元函式都隱式的含有乙個this指標
細節點說明:
this 實際上是成員函式的乙個形參,在呼叫成員函式時將物件的位址作為實參傳遞給 this。不過 this 這個形參是隱式的,它並不出現在**中,而是在編譯階段由編譯器默默地將它新增到引數列表中。
this 作為隱式形參,本質上是成員函式的區域性變數,所以只能用在成員函式的內部,並且只有在通過物件呼叫成員函式時才給 this 賦值。
舉例說明:
#include
#include
#include
using
namespace std;
class
myclass
private
: string str;};
intmain()
// return *this; 返回當前物件
// return this; 返回當前物件的位址
#include
#include
#include
using namespace std;
class my_class
;inline
void my_class:
:func
(int x)
intmain()
注意:(1)上圖中子類物件呼叫的虛函式是子類的虛函式
(2)this 是 const 指標,它的值是不能被修改的,一切企圖修改該指標的操作,如賦值、遞增、遞減等都是不允許的
(3)this 只能在成員函式內部使用,用在其他地方沒有意義,也是非法的
(4)只有當物件被建立後 this 才有意義,因此不能在 static 成員函式中使用(後續會講到 static 成員)
(5)物件模型中的this指標
: 呼叫的過程示意如下
在這個過程中會傳送動態繫結:
何謂動態繫結
指標(this)
向上轉型
呼叫虛函式
(3)友元函式沒有 this 指標,因為友元不是類的成員。只有成員函式才有 this 指標。
說一下Docker 一
對於提高伺服器的效能,支援輕量級的虛擬,實現開發測試上線的高度一致,團隊開發環境的協調統一,docker表現得極為出色。在功能上,我們將docker理解為乙個超輕量級的虛擬機器,它比vmware占用的資源少很多,執行速度快很多,因為它們的底層實現技術完全不同。docker就像乙個模具,我們能在作業系...
細說一下重寫和過載
這兩個都是多型的一種表現形式。過載 1 過載是在編譯器通過方法中形參的靜態型別確定呼叫方法版本的過程。2 過載是多型在編譯期的表現形式 3 過載的判定只有兩個條件 其他的條件都不能作為判定 1 方法名一致 2 形參列表不同 重寫 1 重寫在方法執行時,通過呼叫者的實際型別來確定呼叫的方法版本。具體細...
說一下Path類
在檔案io中,經常要處理一些與檔案路徑或檔名有關的東西,說白了,非常類似字串的處理,我個人理解,處理路徑資訊,可以等同於特殊字串的處理 不過,用字串的處理方式去處理檔案路徑問題,有些複雜,net的system.io命名空間中,提供了乙個path類,以及一系列靜態方法,可以用來處理常見的有關檔案路徑的...