趙娟
摘要:本文主要介紹C++語言中通過全局變量、局部變量、類的數據成員、類的靜態數據成員、友元來實現了函數間、對象間的共享,在實現共享的同時,又保護了數據,使數據的安全性得到了提高。
關鍵詞:C++;數據;函數;安全性
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2019)04-0212-02
Abstract: This paper introduces that it shares data between function and object, through global variables, local variables, data members of the class, static data members of the class, a friend to achieve inter-function, in C ++ language. At the same time, it protects the data, so that data security has been improved.
Keywords: C ++; data; function; security
C++語言是一種面向對象的程序設計語言,它把數據和對數據的操作封裝到一起形成類,通過類的繼承和多態來實現代碼的重用。其中封裝的特性使得C++語言在很大程度上提高了數據的安全性,這也是C++區別與C語言的一大特點。在使用C++語言時,如何達到數據的共享,也是一大難點,并且共享的同時還要考慮如何提高數據的安全性,針對此問題,C++語言提供了5種共享機制,用來處理函數間、對象間的共享問題。
1 C++語言的共享機制
1.1 函數間的共享機制
(1) 使用全局變量實現共享
所謂的全局變量就是在函數外部定義的變量,它不屬于哪一個函數,其作用域范圍從聲明點開始到整個文件結束,在此期間,只要是在全局變量聲明之后定義的函數都可以使用該全局變量。所以只要將要共享的數據存放在全局變量里,需要共享數據的函數在全局變量之后定義,函數間使用同一個變量,可實現共享。
//f函數g函數通過全局變量實現數據global的共享
#include
using namespace std;
int global;//全局變量
void f()
{ global=5;}
void g()
{ cout< int main() { f(); g(); return 0;} (2) 使用局部變量實現共享 局部變量顧名思義其作用域范圍僅限于函數內部,如何實現函數間的數據共享呢?那就是通過參數傳遞,因為實參和形參都是局部變量,都有各自的作用域,我們將所要共享的數據設置為實參,函數間相互調用的時候實參傳形參,就實現了主調函數和被調函數之間的數據共享,其共享數據為實參的值。 //f函數g函數通過局部變量的參數傳遞實現數據global的共享 #include using namespace std; void g(int part) { cout< void f() { int global=5;//要共享的數據 g(global);} int main() { f(); return 0; } (3) 使用類的數據成員實現共享 此種共享方式是利用類的封裝,將函數和所要共享的數據封裝到一個類里,這樣作為類的成員,函數可以訪問數據,實現了共享。同時由于封裝使得被共享的數據成為類的私有數據成員,類外無法直接訪問,所以數據的安全性得到了提高。 //f函數g函數通過類的封裝實現數據global的共享 #include using namespace std; class Application { public: void f(); void g(); private: int global;}; void Application::f() { global=5;} void Application::g() {cout< int main() { Application MyApp; MyApp.f(); MyApp.g(); return 0; } (4) 使用友元函數實現共享 使用友元函數實現共享的前提必須是:類外的函數要共享類內的保護或者私有數據。類的封裝使得類內的私有或保護成員被隱藏起來了,類外無法直接訪問。類外的函數想要共享這些隱藏起來的成員,就必須破壞類的封裝,而友元機制剛好提供了此項功能,只需在類內將要共享數據的函數聲明為友元函數,類外函數就可以通過對象去訪問類內的私有或保護成員,對友元函數而言實現了共享,對其他類外的函數又實現了隱藏,保護了數據的安全性。 //set函數和show函數共享類Point的數據X,Y
#include
using namespace std;
class Point
{ public:
Point(int xx=0, int yy=0) {X=xx;Y=yy;}
friend void set(Point &a);
friend void show(Point &a);
private:
int X,Y;};
void set( Point& a)
{a.X=1; a.Y=2;}
void show( Point& a)
{cout< int main() { Point p1(3,5); set(p1);//set函數給對象p1的X,Y賦值 show(p1);//show函數輸出對象p1的X,Y值 return 0;} 1.2 對象間的共享機制 (1) 對象間共享數據 C++語言中,同一個類的對象間想要實現數據的共享,前提是這個共享的數據必須是本類公共的數據,不屬于任何一個對象;靜態數據成員剛好滿足這一條件,本類所有對象維護同一個拷貝,也就是說對于類而言,靜態數據成員是唯一的,也是公共的。對象間使用靜態數據成員時,就實現了共享,如果想要共享的數據的安全性更高,還可以將靜態數據成員設置為常類型,也就是類似常量的變量,只能初始化,不能被更新。 //對象A和對象B共享countP數據 #include using namespace std; class Point {public: Point(){countP++;} Point(Point &p){countP++;} static const int countP;}; int Point::countP=0; int main() { cout< Point A; cout< Point B(A); cout< (2) 對象間共享函數 對象間共享函數的原理與共享數據的原理相似,只要函數是本類唯一的,公共的,就可以實現共享,所以將要共享的函數設置為靜態的成員函數。 //對象A和對象B共享GetC()函數 #include using namespace std; class Point {public: Point(){countP++;} Point(Point &p){ countP++;} static void GetC() {cout<<" Object count="< private: static int countP; }; int Point::countP=0; int main() { Point::GetC(); //輸出初始對象個數 Point A; A.GetC(); //Point::GetC();輸出對象個數 Point B(A); B.GetC(); } //Point::GetC();輸出對象個數 2 結論 本文介紹了C++語言中函數間的四種方式和對象間共享的兩種方式,不論是函數間共享還是對象間共享,都要考慮兩點:一是如何實現共享;二是在能共享的前提下如何讓被共享的數據的安全性更高。在以上所有的方式中,將函數和數據封裝到類里,并把數據設置為類的私有常類型的數據成員,這樣函數間共享數據的安全性更高。而對象間共享時,只需要把被共享的數據設置為私有靜態常類型的成員,這樣對象間共享數據的時候,其安全性也得到了更大的保障。 參考文獻: [1] 鄭莉等編著. C++語言程序設計[M]. 北京:清華大學出版社,第四版,2014. [2] 馬榮貴. C++中共享數據的保護方法[J]. 長安大學學報,2005. [3] 閔小玲. C++中數據共享的實現機制[J]. 黃石理工學院學報,2005. [4] 聶豐英. 淺談靜態成員在C++中的應用[J]. 硅谷,2008. [5] 廖鋒,胡麗平,楊巧合. C++語言中靜態數據成員和靜態成員函數的研究[J]. 電腦知識與技術,2006. 【通聯編輯:梁書】