C 裡那些不為人知的事 成員函式

2021-05-26 08:17:33 字數 595 閱讀 6741

c++類裡申明乙個公共的成員函式,通常有幾種方式去訪問。

1、class obj;

2、class *pobj = new class;

3、靜態函式的話,可以用class::fun();

4、還可以通過this指標訪問。

第一種情況可以通過"."操作符訪問到成員函式,看過彙編後就是通過obj的型別找到相應的成員函式。

第二種情況下是通過指標訪問成員函式,彙編顯示這種方式和第一種方式的不同之處在於在堆上申請一塊記憶體,對相應的成員變數按照順序進行初始化。但是訪問成員函式的彙編**卻是一樣的。彙編**如下。

第三種方式只有上面所示彙編語句的第二條呼叫。

第四種方式是this指標指向類所在記憶體位址的起始位置,但呼叫方式和其它三種方式一樣。

這就說明乙個問題,c++裡的成員函式在編譯的時候只有乙個副本,大家呼叫的都是同乙個函式,只通過型別去查詢成員函式和呼叫它。所以說這樣寫來呼叫成員函式沒有問題。看下面的列子。

只要沒有fun()裡沒有呼叫成員變數就沒有問題,因為成員函式是通過型別呼叫的,而不是位址去查詢。而成員變數卻是通過指向類在記憶體裡的首位址,加減不同資料型別的長度去查詢和呼叫。同時也說明每個物件在記憶體裡的位址都是不一樣的。

opencv介面那些不為人知的事!

最近在寫個神經網路識別的小專案,要用到opencv載入,本事再簡單不過的事情,結果卻遇到百思不得其解的問題,最後找到了問題的原因 1 opencv的載入介面cvloadimage 路徑可以是絕對路徑也可以是相對路徑,但是要求格式是 或者是 的目錄格式,建議用 這種方式,這種是無論是檔案路徑還是網頁的...

CSS3那些不為人知的高階屬性

儘管現代瀏覽器已經支援了眾多的css3屬性,但是大部分設計師和開發人員貌似依然在關注於一些很 主流 的屬性,如border radius box shadow或者transform等。它們有良好的文件 很好的測試並且最常用到,所以如果你最近在設計 你很難能脫離它們。說明 對於每個屬性,我們這裡規定 ...

Git那些不為人知的秘籍以及Sao操作

別名用來幫助你定義自己的git命令。比如你可以定義git a來執行git add all。要新增乙個別名,一種方法是開啟 gitconfig檔案並新增如下內容 alias co checkout cm commit p push show verbose output about tags,bran...