C++语言中共享机制的实现

2019-05-24 14:11赵娟
电脑知识与技术 2019年4期
关键词:数据安全性函数

赵娟

摘要:本文主要介绍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.

【通联编辑:梁书】

猜你喜欢
数据安全性函数
新染料可提高电动汽车安全性
二次函数
二次函数
函数备考精讲
浅谈计量自动化系统实现预购电管理应用
ApplePay横空出世 安全性遭受质疑 拿什么保护你,我的苹果支付?
Imagination发布可实现下一代SoC安全性的OmniShield技术