程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++中類的成員函數調用剖析

c++中類的成員函數調用剖析

編輯:C++入門知識

此用一個小示例來說明c++中成員函數是怎麼調用的


#include 
using namespace std;

class Test{
public:
	void funcMember(){
		cout << "I'm member function" << endl;
		int *ptr = reinterpret_cast(const_cast(this));
		//int *ptr = (int*)(const_cast(this));
		cout << *ptr << endl; //沒弄清為什麼在int x; int y;再棧中的部局中間竟有8個字節的cc cc cc cc cc cc cc cc本應x,y緊挨著的
		ptr += 3; //所以就因為多了兩個4字節就加了3
		cout << *ptr << endl;
		ptr += 3;
		cout << *ptr << endl;
		ptr += 3;
		cout << *ptr << endl;
		ptr += 3;
		cout << *ptr << endl;
	}
	Test():x(3){}
	int x;
};


int main(){
	Test *t = NULL, *ptr;
	
	int x = 10;
	int y = 20;
	int z = 30;
	int zz = 40;
	Test tt;
//	t->funcMember();
	ptr = &tt;
	ptr->funcMember();
	cout << "--------------------------" << endl;
	tt.funcMember();

	return 0;
}



先來說明一下,被注釋掉的部分,為什麼t是空指針,這樣的調用還成功呢

請看下圖反匯編後的結果

\

因此第一處畫紅線的部分,圖中漏掉了一


<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+xMfU2b+0sbvXosrNtfS687PM0PK1xNTL0NC94bn7yOe6zsTYo788L3A+CjxwPjxpbWcgc3JjPQ=="http://www.2cto.com/uploadfile/Collfiles/20140509/20140509091953256.jpg" alt="">

從結果中可以看出,對象的實例是作為地址傳入函數中的,因此只要不使用此地址,無論它是否為空都不會錯誤,如果使用了向本示例所做的那樣,

知道原因也可以靈活改變。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved