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 所屬的類型別 特別之處 究其原因,是...