13 6指向類成員的指標

2021-04-07 00:38:40 字數 1327 閱讀 7405

1.普通函式指標不能付給類的成員函式;要用類指標呼叫類成員函式(不能滿足三個條件1引數2返回值3他的類)

2類成員指標:

定義:指向值的型別 類名::* 指標名;

short screen::*ps_screen=&screen::_height;

3類成員函式的指標:

定義:返回值型別 (類名::*指標名)(引數列表);

int (screen::*p)()=0;           //可以用0初始化 ;

注:付值=&screen::成員函式名;

可以用typedef簡化

typedef int &(screen::*q)();

q next=&screen::forward;

4使用指向類成員的指標  

類例項名->*指標名//成員變數

(類例項名::*指標名)();//成員函式

注:如果

類例項名::*指標名();不行,會被解釋為

類例項名::*(指標名());的

5靜態類成員的指標

static成員函式不能有this

static成員變數位址是普通變數位址

class a;

a a1;    

int *p=&a1::a;

void  (*q)()=&a1::pa; 

下面為附加的:

extern作用總結

extern int i;

指明這裡的i只是宣告,否則i為全域性變數的話會看作定義,有可能違反一次定義法則(odr)

extern foo();

將函式"在其他地方定義"變為顯式的

同名常量可以出現在不同的編譯單元中,且值可以不一樣哦!

//------foo.c--------

const char name = 'h';

//--------------------

//--------bar.c--------

const char name = 'j';

//-----------------------

export作用

export foo() {};

export templatefoo(t t) {};

告訴編譯器,在其他編譯單元中可能需要這個定義。

全域性物件和非內聯函式只能有乙個定義,而內聯函式可以有多個相同的定義(實際情況是多個不同的定義也可以,其實內聯函式和static函式一樣,只是在當前編譯單元有效。其實其他編譯即使單元宣告的此函式,但沒有它的定義,連線時會提示無法找到此函式。)

函式宣告和類定義可見是編譯時的需要,而(成員)函式的定義可見是連線時的需要。

///

重學C (2) 指向類成員的指標

指向類成員的指標,印象中似乎很少用到,重新學習c 的過程中,才發現自己是忽視了乙個很重要的東東,以前我一直認為類的成員函式不能作為 函式,所以很多c程式都始終無法移植到c 上來,現在才知道,這是對指向類成員的指標不了解的緣故。1 指向非靜態成員的指標 其實指向非靜態的類成員的指標很容易,它們與普通指...

惱人的函式指標(二) 指向類成員的指標

前面曾寫過一篇惱人的函式指標 一 總結了普通函式指標的宣告 定義以及呼叫,還有函式指標陣列,函式指標用作返回值等。但是作為c 的研讀,我發現我漏掉了乙個最重要的內容,就是指向類成員的指標,這裡將做相應補充 相關 測試環境為vs 2010 指向類成員的指標總的來講可以分為兩大類四小類 指向資料成員還是...

指向類成員的指標

一 指向類的普通成員的指標 非靜態 1 指向類成員函式的指標 簡單的講,指向類成員函式的指標與普通函式指標的區別在於,前者不僅要匹配函式的引數型別和個數以及返回值型別,還要匹配該函式指標所屬的類型別。總結一下,比較以下幾點 a 引數型別和個數 b 返回值型別 c 所屬的類型別 特別之處 究其原因,是...