應用場景:
(1)主對話框包含一個Tab控件,Tab控件用來切換顯示若干子對話框,子對話框類的成員需要互相訪問。
(2)或者程序中包含多個類,各類之間需要互相訪問。
方法1-定義指針成員變量:
詳情參見文章:MFC一個類訪問另一個類成員對象的成員變量值 - 路人淺笑 - 博客園 https://www.cnblogs.com/perfy/p/5329630.html
方法2-定義全局指針變量:
與方法1類似,只不過定義的指針變量在類的實現cpp文件中,是全局變量。
//TeachDlg.h class TeachDlg { int number; void Lesson(); }
//TeachDlg.cpp #include "TeachDlg.h" TeachDlg * g_DlgTeach; void TeachDlg::Lesson() { number = 1; }
這樣就可以省去在類外初始化靜態成員指針這一步,只需要在類的構造函數中或者對話框初始化函數中對指針進行賦值。如下:
//TeachDlg.cpp
BOOL TeachDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // TODO: Add extra initialization here
g_DlgTeach = this; ... }
最后在其他類中調用本類的函數時,需要在其實現cpp文件中聲明這個全局指針即可。
//Student.cpp #include "TeachDlg.h" extern TeachDlg *g_DlgTeach; Student::Study() { g_DlgTeach->Lesson(); }
注意:
如果沒有對指針進行初始化, 即沒有執行 g_DlgTeach = this; 這句話,
就調用指針來訪問TeachDlg類的成員函數,是不會報錯的,但訪問成員變量就會報錯。