1. 程式人生 > >MFC中非類成員函式呼叫類成員函式方法

MFC中非類成員函式呼叫類成員函式方法

1、定義對話方塊類物件全域性變數指標 CDialog *g_pDlg,同時在初始化對話方塊時用this指標初始化此全域性變數。

2、在非類成員函式中可以使用g_pDlg->成員函式名或變數名進行呼叫訪問。

 

假如有類A,類B兩個類。如果想在B中呼叫A的成員函式,該怎麼辦呢?
方法一:
在類B的cpp檔案中包含A類的標頭檔案,然後在B的需要呼叫A的函式的函式中,新增
#include "A.h"
B::funcB()
{
A a;
a.funcA();
}
由於類A的funcA不是靜態(static)函式,所以在B中不能這樣呼叫
#include "A.h"
B::funcB()
{
A::funcA();
}




會提示“illegal call of non-static member function”的錯誤。
方法二:
方法一是用的建立A的物件,然後由物件呼叫函式的方法。方法二是直接把類A的函式設定成靜態函式,這樣就不需要建立A類,而直接呼叫函式。方法是
在類A中把該函式加上static修飾,之後在B類的函式中
#include "A.h"
B::funcB()
{
A::funcA();
}
這樣就可以直接呼叫函數了。
方法三:
用全域性指標的方法。

在類B的cpp檔案中包含A類,然後在所有類外部宣告A* pA;之後就可以在類B的函式中直接用pA->funcA();除此之外,其他類,比如說,類C想呼叫類A的函式,只需要在類C的cpp檔案的外部宣告 extern A* pA;然後類C的成員函式也可以直接呼叫類A的函數了。

方法四:

看起來比較奇怪的一個設定全域性變數的方法。比如說,想把B類設定成全域性變數,可以在B類外宣告一個全域性變數g_pB,然後在構造完B類後,在B類的建構函式中令g_pB = this。這樣全域性就可以引用這個B類了。