网站首页  词典首页

请输入您要查询的论文:

 

标题 C++语言中共享机制的实现
范文

    赵娟

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

    【通联编辑:梁书】

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/2/11 4:29:23