日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++跨类调用——extern

發布時間:2025/3/21 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++跨类调用——extern 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方式:全局變量實現跨類調用(extern)

環境:MFC

目的:兩個Dialog(Class),A和B,想在B中調用?A中的變量(IplImage * img)

實現:在A.cpp 添加代碼如下

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CADlg * pADlg = new CADlg;

? ? ? ? ? ?在A.cpp的構造函數(和類名同名的函數)中添加代碼如下

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?pADlg = this;

這樣就有一個全局指針變量pADlg指向了實例對象

調用:在B.cpp添加代碼如下

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??extern CADlg *pADlg;

1基本解釋:extern可以置于變量或者函數前,以標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。此外extern也可用來進行鏈接指定。

????? 也就是說extern有兩個作用,(本段取自其他地方,僅供大家方便理解)

第一個,當它與"C"一起連用時,如: extern "C" void fun(int a, int b);則告訴編譯器在編譯fun這個函數名時按著C的規則去翻譯相應的函數名而不是C++的,C++的規則在翻譯這個函數名時會把fun這個名字變得面目全非,可能是fun@aBc_int_int#%$也可能是別的,這要看編譯器的"脾氣"了(不同的編譯器采用的方法不一樣),為什么這么做呢,因為C++支持函數的重載啊,在這里不去過多的論述這個問題,如果你有興趣可以去網上搜索,相信你可以得到滿意的解釋!
??? 第二,當extern不與"C"在一起修飾變量或函數時,如在頭文件中: extern int g_Int;?它的作用就是聲明函數或全局變量的作用范圍的關鍵字,其聲明的函數和變量可以在本模塊活其他模塊中使用,記住它是一個聲明不是定義!也就是說B模塊(編譯單元)要是引用模塊(編譯單元)A中定義的全局變量或函數時,它只要包含A模塊的頭文件即可,在編譯階段,模塊B雖然找不到該函數或變量,但它不會報錯,它會在連接時從模塊A生成的目標代碼中找到此函數。

總結

以上是生活随笔為你收集整理的C++跨类调用——extern的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。