1. 程式人生 > >類成員函式與this指標

類成員函式與this指標

類成員函式的編譯

對於類成員函式,不是一個物件對應一個單獨的成員函式,而是同一類 的所有物件共享這個成員函式體。當程式編譯後,成員函式的地址已經確定,,當呼叫此成員函式時,會將當前物件的this指標傳入成員函式,類的成員函式體只有一份,但成員函式之所以可以把各個物件的資料分開是因為,每次執行成員函式時,都會把當前物件的this指標(首地址)傳入,對類內成員資料的訪問,實際上是通過this指標訪問資料;

看程式碼:

#include <iostream>
using namespace std;

class Data
{
private:
	int data;
public:
	Data(int data):data(data)
	{

	}
	~Data()
	{

	}
	void print()
	{
		cout << "hello" << endl;
	}
	void printData()
	{
		cout << data << endl;
	}
	
};

int main()
{
	Data *p = new Data(1);
	p->print();
	p[0].print();
	p[333].print();
	return 0;
}

結果輸出:

hello

hello

hello

如果訪問class裡的資料

對於不存在的物件,資料訪問時非法的

相關推薦

成員函式this指標

類成員函式的編譯 對於類成員函式,不是一個物件對應一個單獨的成員函式,而是同一類 的所有物件共享這個成員函式體。當程式編譯後,成員函式的地址已經確定,,當呼叫此成員函式時,會將當前物件的this指標傳入成員函式,類的成員函式體只有一份,但成員函式之所以可以把各個物件的資料分

和物件的六個預設成員函式this指標建構函式

類和物件的六個預設成員函式之建構函式 this指標: 在C++中的成員函式也是按照C類似的方式處理的,即:成員函式實際上也有一個指標時隱藏的,指向了呼叫函式的物件本身,這個指標就是this指標 t

靜態成員函式this指標、物件指標和動態物件使用小結

·靜態成員函式就是使用static 關鍵字宣告的成員函式  在類外實現時不加static關鍵字,只有在類內宣告時才加static·靜態成員函式是類的一部分,作用是為了處理靜態資料成員  沒有this指標·靜態成員函式可以直接訪問該類的靜態成員,但不能直接訪問類中的非靜態成員·若想在靜態成員fun中使用非靜態成

成員函式this指標的意義

同樣受訪問修改符的限制,被public修飾的可以被外部訪問,被private修飾的則不能被外部訪問 class Object { public: int x; int y; void Test()

成員函式this指標

成員函式和this指標 類的成員函式和一個普通的(全域性)函式可以認為沒有什麼差別。對於編譯器來說,經過名稱處理後(利用名稱空間、類名、引數等資訊進行技術性處理,使函式名稱內部唯一),一個成員函式其實就是一個普通函式,在編譯後的程式碼區域有著確定的函式體和函式入口。最大的差異發生在呼叫時,對於成員函式,編譯

運算子過載函式作為成員函式友元函式的區別

運算子過載函式作為類成員函式與友元函式 最近在學習C++的基礎,簡單地記一些筆記。 關於運算子過載函式作為成員函式還是友元函式的注意點: 當運算子過載函式作為類的成員函式時,要求運算元左邊必須是一個物件,而函式的引數可以是同類的物件也可以是普通的變數

成員函式過載函式指標

在有成員函式過載的情況下該如何使用函式指標呢 class l { public: void func(); void func(int, int); }; void l::func() { cout << "func()" << endl; }

ROS 內如何使用成員函式作為subscribe的回撥函式this指標

ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, &listener); 使用類內函式時,將第四個引數替換成this: ros::Subscriber sub

c++ 成員函式內刪除this指標

問題1:成員函式內能不能delete this。 但從編譯來說, 都是可以的。 但從執行中, 又得分情況來看。 1.  解構函式內呼叫delete this。 這是一定不行的, 解構函式內呼叫delete this 可以理解為 函式無終止條件自我遞迴呼叫, 最終導致棧溢位。

資料結構演算法----自定義函式資料成員

近期在梳理知識,做一個小結,希望自己能多多使用 在標頭檔案中: enum sign {plus, minus}; class Accruency { public: Accruency(sign s = plus, unsigned long d = 0, unsigned in

指向成員函式指標並非指標

指向類成員函式的指標並非指標 參考<<C++必知必會>>的相關章節 "指向類成員函式的指標",這個術語中包含了"類成員函式"的術語,但是嚴格的說,這裡的成員函式只是指非靜態成員函式,這個術語中還包含了"指標"這個術語,但是嚴格的說,它即不包含地址,行為也不象指標,說

c++中,一個中同名的const成員函式非const成員函式為什麼可以構成過載

#include<iostream> using namespace std; class Test { public: Test(int v):data(v){} void print()//this指標的型別是Test * { cout<&

C++ 函式指標 指向成員函式

//A類與B類的定義 class A { public:   void Test()   {     cout << "A::Test()" << endl;   } }; &

c++中的函式指標成員函式指標

// // main.cpp // Demo // // Created by 杜國超 on 16/12/28. // Copyright © 2016年 杜國超. All rights reserved. // #include using namespace std; class MYCla

C++繼承詳解之二——派生成員函式詳解(函式隱藏、建構函式相容覆蓋規則)

  在這一篇文章開始之前,我先解決一個問題。   在上一篇C++繼承詳解之一——初探繼承中,我提到了在派生類中可以定義一個與基類成員函式同名的函式,這樣派生類中的函式就會覆蓋掉基類的成員函式。   在譚浩強的C++程式設計這本書第十一章,351頁最下面有這麼

的預設成員函式友元函式

在C++中,類與C語言中的結構體類似,類與結構體的不同之處便是在其內部多了幾個成員函式還有幾個訪問限定符,訪問限定符有public(公共)、protected(保護)、private(私有),而成員函式總的來說共包括六大類,他們便是類與結構體的不同之處,六大預設

C++基礎知識(六)----成員函式的定義--物件的建立使用--從面向過程到面向物件

一、類   1.類是一種資料型別,將資料與對資料的操作(函式)放到一起。一個類中的資料通常只能通過本類提供的方法進行處理,這些方法成為該類與外部的介面,物件之間通過訊息進行通訊。   2.如果在類的起始點無訪問說明符,系統預設為私有(private)   3.類是一種資料型別,定義時系統不為類分配儲存空

指向成員/函式指標

C++擴充套件了指標在類中的使用,使其可以指向類成員,這種行為是類層面的,而不是物件層面的。 指向類成員/函式的指標的本質並不是取地址.而是利用了物件地址的偏移量 我們建立了一個類,假設我們要使用指標指向類中的成員 class Student { public: Student(s

C++指標直接呼叫成員函式探討

摘要 本文分析了C++程式設計中用指標呼叫“類” 成員函式時出現的問題、原因及後果,討論了一般函式指標和“類”成員函式指標的不同。得出結論: 任何指向“類”的成員函式指標,由於攜帶額外的所屬物件資訊,與一般的函式有根本的不同,不能直接用來進行函式呼叫。此外,本文給出了幾種間接呼叫類的成員函式的方法。作者所

的static成員函式普通成員函式的區別

程式最終都將在記憶體中執行,變數只有在記憶體中佔有一席之地時才能被訪問。 類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配記憶體,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的物件,所以只有在類的物件產生(建立類的例項)時才會分配記憶體,然後通過類的物件(例項)去訪問。 在一個類的靜態