1. 程式人生 > >C++之指向物件成員函式的指標

C++之指向物件成員函式的指標

1. 普通函式的指標變數定義

   資料型別名 (*指標變數名)(引數列表);

   例如:void (*p)( ); //p指向void型函式的指標變數;

         p = fun;      //fun入口地址賦予p;

         (*p)( );      //呼叫fun函式;

2. 指向物件成員函式的指標變數[指向物件成員函式的指標變數與普通函式的指標變數的根本區別:前者為類的成員]

   指標變數型別與右側函式匹配要求:

       1)引數型別及個數相同;

       2)返回型別相同;

       3)所屬的類相同。

   定義:資料型別名 (類名::*指標變數名)(引數列表);

         指標變數名 = &類名::成員函式名;

   例如:void (Time::*p)( );

         p = &Time::fun;

         (t1.*p)( );

   注:入口地址寫為:&類名::成員函式名,而非&物件名.成員函式名(即t1.fun)。

       原因:成員函式不是存放在物件的空間中,而是在物件外的空間,多個物件公用同一段函式程式碼,故賦給指標p的應        

       是公共函式程式碼段的入口地址。

相關推薦

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

1. 普通函式的指標變數定義    資料型別名 (*指標變數名)(引數列表);    例如:void (*p)( ); //p指向void型函式的指標變數;          p = fun;    

c++指向物件成員函式指標

#include<iostream> #include <iomanip> using namespace std; class Time { private: int

c++ 指向物件成員指標

在c++中類是抽象的,沒有實際記憶體,而物件是具體,是佔有記憶體的,因此物件有地址,存放物件的起始地址的指標變數就是指向物件的指標變數。物件中的成員也是佔有記憶體的,所以,存放物件成員的起始地址的指標變數就是指向物件成員的指標變數。1.指向物件資料成員的指標int *p1;

C++利用typedef定義函式指標

進入正文: 程式碼簡化, 促進跨平臺開發的目的. typedef 行為有點像 #define 巨集,用其實際型別替代同義字。 不同點:typedef 在編譯時被解釋,因此讓編譯器來應付超越前處理器能力的文字替換。用法一:typedef int (*MYFUN)(int, int);  這種用法一般用在給函式定

指向成員函式指標 (對外建立一個測試函式介面測試類中私有函式介面)

程式碼單元測試時候,怎樣讓外部測試自己私有函式介面了, 此處對外提供一個公有的函式測試介面,測試其私有介面函式 ,此處用指向類成員函式指標來實現 例子如下:   #include<QCoreApplication> #include<iostream&g

c++中指向物件指標為NULL時可以呼叫物件成員函式

問題貌似有點奇怪,指標都為NULL了怎麼還可使用?但其實不是的,可以看以下程式碼: #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 void

C++不同物件成員函式如何引用指定物件的資料成員

C++成員函式儲存問題點選開啟連結 可知C++成員函式不佔用物件的儲存空間,而是在物件外的空間,而且所有物件共用一段成員函式程式碼,那在不同物件的成員函式如何保證引用指定物件的資料成員呢? 關鍵祕籍——this指標    

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

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

C++物件、常成員變數與常成員函式詳解

一、常物件說明:常物件是指物件的資料成員的值在物件被呼叫時不能被改變。常物件必須進行初始化,且能被更新。不能通過常物件呼叫普通成員函式,但是可以通過普通物件呼叫常成員函式。常物件只能呼叫常成員函式

C/C++開發語言系列20---C++類成員函式指標2

#include <iostream> #include <string> #include <vector> #include <map> using namespace std; class Foo { public: strin

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

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

《面向物件程式設計 C++》指向物件指標

成員選擇運算子. class C{ public: void m(){ /*...*/ } }; void f( C& ); int main(){ C c1; c1.m(); // object f(c1); } void f( C& c){ c.m(); /

為什麼 C++ 中成員函式指標是 16 位元組?

當我們討論指標時,通常假設它是一種可以用 void * 指標來表示的東西,在 x86_64 平臺下是 8 個位元組大小。例如,下面是來自 維基百科中關於 x86_64 的文章 的摘錄: Pushes and pops on the stack are always in 8-byte strides

C++類 給結構體成員 函式指標 賦值

myStruct標頭檔案 myStruct.h class CMyClass; struct {  int nFlag;  void (CMyClass::*myinit)(int n);  void (CMyClass::*myopen)(int n,void* arg)

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

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

C++的靜態成員函式指標

先簡單的說說非靜態的成員函式。 非靜態成員函式指標的型別:     類的非靜態成員是和類的物件相關的。也就是說,要通過類的物件來訪問變數。 成員函式的型別定義為:     typedef void (A::*pfunc)();  A是一個類,有一個成員函式void test

C++中仿函式/函式物件函式指標的用法

研究這個起因是這樣的,就是今天在用priority_queue的時候,需要自定義比較函式,但是此時又不能修改需要比較的類的內容(即不能用過載<的方法),所以只能寫在外面,但是發現這樣並不能編譯通過。報的錯叫cmp(我寫的那個比較函式)不是型別名。後來

C/C++中的struct使用函式指標,而且在C++中的struct還能使用成員函式

1、函式指標 一般的函式指標可以這麼定義: int(*func)(int,int); 表示一個指向含有兩個int引數並且返回值是int形式的任何一個函式指標. 假如存在這樣的一個函式: int add2(int x,int y) {

指向成員/函式指標

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

成員函式指標與高效能的C委託(中篇)

成員函式指標——為什麼那麼複雜?  類的成員函式和標準的C函式有一些不同。與被顯式宣告的引數相似,類的成員函式有一個隱藏的引數this,它指向一個類的例項。根據不同的編譯器,this或者被看作內部的一個正常的引數,或者會被特別對待(比如,在VC++中,this一般通過ECX暫