C 共享變數機制

2021-09-01 16:38:36 字數 2126 閱讀 5348

在程式設計中如何實現不同的函式模組之間的資料共享,是程式設計中的關鍵技術問題。

本文以c++為例,詳細闡述了物件導向程式設計中各種方式資料共享的實現機制。

c++是目前應用廣泛的一種物件導向程式設計語言,它比較適合於編寫大型複雜程式。它所提供的資料共享機制具有廣泛的代表性,能夠很好的解決程式設計中資料的共享。

1、使用區域性變數和全域性變數共享

資料使用區域性變數能夠在呼叫和被呼叫函式之問通過引數傳遞實現不同函式塊之問的資料共享【區域性變數具有區域性作用域,能很好地實現函式之間的資料隱蔽。但在傳遞過程中需要很大的系統開銷,故一般只用於傳遞少量的資料。

全域性變數具有檔案作用域。全域性變數所儲存的資料在程式中任何地方都可以訪問,能夠在程式中的所有函式之間實現資料共享。例如:

include< iostream.h >

int i;//定義i為全域性變數

void f()

//在函式f中給全域性變數賦值

void p()

//在函式p中輸出全域性變數i

int main()

使用全域性變數實現共享資料相當方便,但其***也相當大。因為全域性變數無法對資料的訪問權進行有效控制。也就是說,我們很難知道程式中資料在那些函式中共享,這樣一旦共享的黃石理工學院學報2023年資料發生結構性調整,也就很難判斷它到底影響到哪些函式,從而給程式維護帶來相當大的困難。

這種共享方式,直接影響到資料安全、程式**重用和擴充。所以,在程式設計中,應可能少的使用這種共享方式。

2、通過類的資料成員共享資料

c++中類內部封裝的資料成員提供了同一類的函式成員之間進行資料共享機制。這種共享方式一方面實現了類內部函式的全面共享,同時也提供了通過設定適當的訪問控制屬性,把共享只限制在類的範圍之內,這樣對類外來說,類的資料成員仍是隱藏的,達到了共享與隱藏兩全,解決了全域性變數和區域性變數所無法克服的矛盾。例如:乙個時鐘類,該類中封裝了私有資料成員有hour,minute,second,在類的成員函式之間實現資料共享。在類的外面,對它們的訪問只能通過類自身提供的外部介面進行,無法直接訪問。

class clock//時鐘類的宣告

;3、通過類的靜態成員實現資料共享

c++中使用靜態成員可以實現同一類的不同物件之間共享資料。類的普通資料成員在類的每乙個物件都有乙個拷貝,就是說每個物件的同名資料成員可以分別儲存不同數值,這就保證物件擁有自身區別其他物件的特徵的需要。靜態資料成員是類的資料成員的一種特例,採用static關鍵字來宣告;每個類只有乙個拷貝,由該類的所有物件共同維護和使用,從而實現了同一類的不同物件之間的資料共享。例如有一學生類:

class student

如果程式中需要統計學生人數,這個資料存放在什麼地方呢?若以類外的全域性變數來存放,不能實現資料的隱藏,若在類中增加乙個資料成員用以存放人數,必然在每乙個物件中都儲存一副本,這樣不僅冗餘,而且每個物件分別維護乙個「人數」,勢必造成資料的不一致性。因此,比較好的方案是在student類中增加乙個靜態資料成員static count用來存放學生「人數」.

4、通過友元機制共享資料

在乙個類中,可以利用關鍵字friend將別的模組(一般函式、其他類的成員函式或其他類)宣告為它的友元,這樣這個類中本來隱藏的資訊就可以被友元訪問【如果友元是一般函式或類的成員函式,稱為友元函式;如果友元是乙個類,則稱為友元類,友元類的所有成員函式都成為友元函式。例如:

class b

;在b類宣告f函式為友元函式,則在f函式中通過物件名可直接訪問b類所有的資料成員。同時在b類宣告a類為友元類,則a類的所有成員函式都是b類的友元函式,都可以訪問b類的私有和保護成員。採用友元類共享資料機制,使友元類成員函式可以通過物件名直接訪問到隱藏的資料,從而使程式達到高效協調工作。在較為複雜的問題中,實現不同類之間的資料共享,友元類的使用也是必不可少的選擇。

友元在類之間、類與普通函式之間共享了內部封裝的資料的同時,必然會對類的封裝性帶來一定的破壞。因此在程式設計中使用友元,要在共享和封裝之間找到乙個恰當的平衡點,從而達到提高程式效率同時,將程式隱患降來最低。

5、結束語

在大型程式設計中資料共享問題是乙個複雜的綜合性問題。設計過程中既要實現資料共享,又要保證共享資料的安全。這就要求程式設計人員必須充分了解各種實現機制的執行場合,熟知運用它們所帶來的利與弊,這樣才能恰到好處地運用這些機制,設計出高質量程式。

不知道看完這邊文章,學員們對於c++中資料共享的實現機制了解的更加清楚了呢?希望本篇文章能對大家有一定的幫助。

Tensorflow共享變數機制

我們定義變數通常使用tf.variable 的方式進行建立變數,但在某種情況下,乙個模型需要使用其他模型建立的變數,兩個模型一起訓練。比如 對抗網路中的生成器模型和判別器模型。如果使用variable進行建立,那麼得到的是乙個新的變數,而非原來的變數。這時就需引入共享變數解決問題。使用tf.vari...

共享記憶體機制

共享記憶體主要是通過對映機制實現的。共享記憶體例項一 include include include include using namespace std int main else getchar 注意,程序關閉後,所有控制代碼自動關閉,所以要在這裡暫停 解除檔案對映,關閉記憶體對映檔案物件控制...

多執行緒共享全域性變數和加鎖機制

import threading value 0 def add value 引用全域性變數,並保證全域性變數不被清零,使用global global value for x in range 1000 value 1 print value d value def main for x in ra...