趙娟
摘要:本文主要介紹C++語言中通過全局變量、局部變量、類的數(shù)據(jù)成員、類的靜態(tài)數(shù)據(jù)成員、友元來實現(xiàn)了函數(shù)間、對象間的共享,在實現(xiàn)共享的同時,又保護了數(shù)據(jù),使數(shù)據(jù)的安全性得到了提高。
關(guān)鍵詞:C++;數(shù)據(jù);函數(shù);安全性
中圖分類號: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++語言是一種面向?qū)ο蟮某绦蛟O(shè)計語言,它把數(shù)據(jù)和對數(shù)據(jù)的操作封裝到一起形成類,通過類的繼承和多態(tài)來實現(xiàn)代碼的重用。其中封裝的特性使得C++語言在很大程度上提高了數(shù)據(jù)的安全性,這也是C++區(qū)別與C語言的一大特點。在使用C++語言時,如何達到數(shù)據(jù)的共享,也是一大難點,并且共享的同時還要考慮如何提高數(shù)據(jù)的安全性,針對此問題,C++語言提供了5種共享機制,用來處理函數(shù)間、對象間的共享問題。
1 C++語言的共享機制
1.1 函數(shù)間的共享機制
(1) 使用全局變量實現(xiàn)共享
所謂的全局變量就是在函數(shù)外部定義的變量,它不屬于哪一個函數(shù),其作用域范圍從聲明點開始到整個文件結(jié)束,在此期間,只要是在全局變量聲明之后定義的函數(shù)都可以使用該全局變量。所以只要將要共享的數(shù)據(jù)存放在全局變量里,需要共享數(shù)據(jù)的函數(shù)在全局變量之后定義,函數(shù)間使用同一個變量,可實現(xiàn)共享。
//f函數(shù)g函數(shù)通過全局變量實現(xiàn)數(shù)據(jù)global的共享
#include
using namespace std;
int global;//全局變量
void f()
{ global=5;}
void g()
{ cout< int main() { f(); g(); return 0;} (2) 使用局部變量實現(xiàn)共享 局部變量顧名思義其作用域范圍僅限于函數(shù)內(nèi)部,如何實現(xiàn)函數(shù)間的數(shù)據(jù)共享呢?那就是通過參數(shù)傳遞,因為實參和形參都是局部變量,都有各自的作用域,我們將所要共享的數(shù)據(jù)設(shè)置為實參,函數(shù)間相互調(diào)用的時候?qū)崊餍螀?,就實現(xiàn)了主調(diào)函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)共享,其共享數(shù)據(jù)為實參的值。 //f函數(shù)g函數(shù)通過局部變量的參數(shù)傳遞實現(xiàn)數(shù)據(jù)global的共享 #include using namespace std; void g(int part) { cout< void f() { int global=5;//要共享的數(shù)據(jù) g(global);} int main() { f(); return 0; } (3) 使用類的數(shù)據(jù)成員實現(xiàn)共享 此種共享方式是利用類的封裝,將函數(shù)和所要共享的數(shù)據(jù)封裝到一個類里,這樣作為類的成員,函數(shù)可以訪問數(shù)據(jù),實現(xiàn)了共享。同時由于封裝使得被共享的數(shù)據(jù)成為類的私有數(shù)據(jù)成員,類外無法直接訪問,所以數(shù)據(jù)的安全性得到了提高。 //f函數(shù)g函數(shù)通過類的封裝實現(xiàn)數(shù)據(jù)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) 使用友元函數(shù)實現(xiàn)共享 使用友元函數(shù)實現(xiàn)共享的前提必須是:類外的函數(shù)要共享類內(nèi)的保護或者私有數(shù)據(jù)。類的封裝使得類內(nèi)的私有或保護成員被隱藏起來了,類外無法直接訪問。類外的函數(shù)想要共享這些隱藏起來的成員,就必須破壞類的封裝,而友元機制剛好提供了此項功能,只需在類內(nèi)將要共享數(shù)據(jù)的函數(shù)聲明為友元函數(shù),類外函數(shù)就可以通過對象去訪問類內(nèi)的私有或保護成員,對友元函數(shù)而言實現(xiàn)了共享,對其他類外的函數(shù)又實現(xiàn)了隱藏,保護了數(shù)據(jù)的安全性。 //set函數(shù)和show函數(shù)共享類Point的數(shù)據(jù)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函數(shù)給對象p1的X,Y賦值 show(p1);//show函數(shù)輸出對象p1的X,Y值 return 0;} 1.2 對象間的共享機制 (1) 對象間共享數(shù)據(jù) C++語言中,同一個類的對象間想要實現(xiàn)數(shù)據(jù)的共享,前提是這個共享的數(shù)據(jù)必須是本類公共的數(shù)據(jù),不屬于任何一個對象;靜態(tài)數(shù)據(jù)成員剛好滿足這一條件,本類所有對象維護同一個拷貝,也就是說對于類而言,靜態(tài)數(shù)據(jù)成員是唯一的,也是公共的。對象間使用靜態(tài)數(shù)據(jù)成員時,就實現(xiàn)了共享,如果想要共享的數(shù)據(jù)的安全性更高,還可以將靜態(tài)數(shù)據(jù)成員設(shè)置為常類型,也就是類似常量的變量,只能初始化,不能被更新。 //對象A和對象B共享countP數(shù)據(jù) #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) 對象間共享函數(shù) 對象間共享函數(shù)的原理與共享數(shù)據(jù)的原理相似,只要函數(shù)是本類唯一的,公共的,就可以實現(xiàn)共享,所以將要共享的函數(shù)設(shè)置為靜態(tài)的成員函數(shù)。 //對象A和對象B共享GetC()函數(shù) #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(); //輸出初始對象個數(shù) Point A; A.GetC(); //Point::GetC();輸出對象個數(shù) Point B(A); B.GetC(); } //Point::GetC();輸出對象個數(shù) 2 結(jié)論 本文介紹了C++語言中函數(shù)間的四種方式和對象間共享的兩種方式,不論是函數(shù)間共享還是對象間共享,都要考慮兩點:一是如何實現(xiàn)共享;二是在能共享的前提下如何讓被共享的數(shù)據(jù)的安全性更高。在以上所有的方式中,將函數(shù)和數(shù)據(jù)封裝到類里,并把數(shù)據(jù)設(shè)置為類的私有常類型的數(shù)據(jù)成員,這樣函數(shù)間共享數(shù)據(jù)的安全性更高。而對象間共享時,只需要把被共享的數(shù)據(jù)設(shè)置為私有靜態(tài)常類型的成員,這樣對象間共享數(shù)據(jù)的時候,其安全性也得到了更大的保障。 參考文獻: [1] 鄭莉等編著. C++語言程序設(shè)計[M]. 北京:清華大學出版社,第四版,2014. [2] 馬榮貴. C++中共享數(shù)據(jù)的保護方法[J]. 長安大學學報,2005. [3] 閔小玲. C++中數(shù)據(jù)共享的實現(xiàn)機制[J]. 黃石理工學院學報,2005. [4] 聶豐英. 淺談靜態(tài)成員在C++中的應(yīng)用[J]. 硅谷,2008. [5] 廖鋒,胡麗平,楊巧合. C++語言中靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的研究[J]. 電腦知識與技術(shù),2006. 【通聯(lián)編輯:梁書】