广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ 数据共享与保护
  • 238
分享到

C++ 数据共享与保护

2024-04-02 19:04:59 238人浏览 薄情痞子
摘要

目录1.作用域2.可见性3.对象的生存期4.类数据的共享5.类共享数据的保护1.作用域 作用域:一个标识符在程序正文中有效的区域。 函数原型(函数声明)作用域 例如函数原型void

1.作用域

作用域:一个标识符在程序正文中有效的区域。

函数原型(函数声明)作用域

例如函数原型void Print(int a);,变量a的作用域为括号左右之间。

局部作用域

例如如下函数定义,变量a的作用域为大括号之间。


void Print(){
int a = 0;
std::cout << a << std::endl;
}

类作用域

X类的成员m具有类作用域(设其一个实例对象为x),以下是在不同环境下对m的访问方法:

1.类内访问:

直接通过标识符m访问。

2.类外访问:

普通成员通过x.m
类成员通过X::m
对象指针通过ptr->m

命名空间作用域

在XX命名空间中声明的对象m,其作用域在命名空间之内。命名空间外想访问该对象要以XX::m的方式进行。


namespace XX{  // 命名空间中声明
 void Print();
}

XX::Print(){  // 命名空间外定义
 //Print函数的定义
}

XX::Print()  // 命名空间外使用



using语句可以简化对命名空间内对象的访问:

  • 1.使用using XX::Print;语句后,其后只需要通过Print就可以调用该函数对象。
  • 2.使用using namespace XX;语句后,其后只需要通过函数名就可以调用XX命名空间下的对象。

2.可见性

可见性:程序运行到某一点,能够引用到的标识符,称该标识符为可见的。
可见性隐藏规则:在多个具有包含关系的作用域声明的同名标识符,外层标识符在内层不可见。
全局变量:可以被本程序所有对象或函数引用。

  • 在默认(全局)命名空间内声明的对象为全局变量,默认本编译单元内可以引用。
  • 通过关键词extern声明引用的全局变量为其他编译单元中已经定义的全局变量。
  • 通过关键词static声明的全局变量只能在本编译单元中使用,不能在其他编译单元用extern声明引用。

局部变量:只能在内部作用域内被引用

3.对象的生存期

生存期:从对象内存空间被分配到被释放的期间。

静态生存期:对象的生存期与程序的运行期相同。

  • 1.在命名空间内声明的对象都具有静态生存期。
  • 2.在局部作用域中用static关键词声明的对象具有静态生存期,在对应局部作用域中具有可见性。

动态生存期:对象的生存期为声明点到声明点所在作用域的结束点之间。

4.类数据的共享

面向结构编程:

程序模块:函数
数据共享方式:参数传递、全局变量

面向对象编程:

程序模块:
数据共享方式:类的静态成员(类内数据共享)、类的友元(类外数据共享)

类的静态数据成员(类属性):类变量由该类所有实例对象共享,用static修饰。
设X类的静态成员为m,类的一个实例对象为x:

  • 类的静态变量必须类内声明,类外定义。
  • 在类的第一个实例对象初始化前初始化,在内存上只有一份副本。
  • 类外定义时通过X::m进行引用,定义后可以通过实例对象进行引用,如x.m。

类的静态函数成员(类方法):主要是处理类属性或者处理该类下多个实例对象的方法,用static修饰。
设X类的静态函数为func,类的一个实例对象为x:

  • 可以直接访问该类的静态数据和函数成员,不能访问非静态成员。
  • 可以在类的第一个实例对象初始化前通过X::func进行调用。
  • 在实例对象初始化可以通过x.func调用,但是为了代码的可读性,不推荐这样使用。

// 静态成员案例
#include<iOStream>
using namespace std;


class A {
public:
 static int s_count;  // 私有静态数据成员声明
 
 static void set_count(int i) { // 静态方法定义
  s_count = i;
 }

 void UsinGCount(){
  s_count++;
 }

};


int A::s_count = 0;  // 私有静态数据成员类外定义(注意要在前面加上数据的类型说明符)


int main() {
 A::s_count;   // 通过类名调用
 A::set_count(11); // 对象初始化前通过静态函数成员访问

 A a1;
 a1.UsingCount();   // 通过普通函数成员修改静态数据成员
 cout << a1.s_count << endl; // 通过对象访问静态数据成员

 A a2;
 a2.UsingCount();
 cout << a2.s_count << endl; // 如果输出结果是13,则证明静态数据成员是共享的

}

输出结果:

12
13

友元关系:一个类主动声明其他类或函数是他的友元,进而给他们提供本类的访问特许,用friend修饰。
友元函数:被一个类声明为友元的函数,在他的函数体内可以通过对象名访问类的私有和保护成员。
友元类:被一个类A声明为友元的另一个类B,类B内所有成员函数都是类A的友元函数。


//友元数据共享案例
#include<iostream>
using namespace std;


class A {
private:
 int m_nums = 10;   // 私有数据成员

friend class B;    // 友元类声明
};


class B { // 友元类
public:
 void Print(A& a) { // 友元函数
  cout << a.m_nums << endl; // 通过对象名访问私有成员
 }
};


int main() {
 A a;
 B b;
 b.Print(a);   // 访问私有数据成员
}

结果输出:

10
1

5.类共享数据的保护

常对象:常对象的数据成员值在对象整个生存期间不能被更改。
设A类的常对象为a,常函数成员为func,常数据成员为m

  • 1. 声明语法:const A a;
  • 2. 常对象必须进行初始化,而且不能被更新(不能赋值或者调用普通成员函数)。
  • 3. 常对象只能调用常函数成员。

常函数成员:能被常对象调用访问常数据成员。

  • 1. 常函数成员声明语法:返回值类型 func(参数表)const;
  • 2. 常函数成员定义部分时要带上const
  • 3. 常函数调用期间,因为目标对象视为常对象,所以只能调用常函数。
  • 4. const可以用于函数重载,通过非const对象调用重载函数优先调用非const的重载函数。

常数据成员:值在初始化后不能被更新。

  • 1. 常数据成员声明语法:const 数据类型 m;。
  • 2. 常数据成员不能被赋值,构造函数只能通过初始化列表进行初始化。
  • 3. 静态常数据成员在类外进行定义。

//常成员案例
#include<iostream>
using namespace std;


class A {
public:
 void Print()const {  // 不修改对象数据成员值的函数应该设为常函数
  cout << a << ',' << b << ',' << s << endl;
 }

 A(int i) :b(i) {};  // 初始化列表初始化

private:
 const int a = 1; // 已初始化的常数据成员
 const int b;  // 未初始化的常数据成员
 const static int s; // 常静态数据成员

};


const int A::s = 3;   // 类外定义


int main() {
 A a(2);
 a.Print();   
}

结果输出:

1,2,3
1

常引用:常引用所引用的对象被视为常对象。

  • 1. 常引用声明语法:const 数据类型 &引用名。
  • 2.非const的引用只能绑定到普通对象。
  • 3. 对于无需修改值的参数(复制构造函数),尽量使用const进行应用

到此这篇关于c++ 数据共享与保护的文章就介绍到这了,更多相关C++ 数据共享与保护内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ 数据共享与保护

本文链接: https://www.lsjlt.com/news/137647.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 数据共享与保护
    目录1.作用域2.可见性3.对象的生存期4.类数据的共享5.类共享数据的保护1.作用域 作用域:一个标识符在程序正文中有效的区域。 函数原型(函数声明)作用域 例如函数原型void...
    99+
    2022-11-12
  • C++的数据共享与保护实例分析
    这篇文章主要讲解了“C++的数据共享与保护实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++的数据共享与保护实例分析”吧!1.作用域作用域是一个标识符在程序正文中有效的区域作用域关...
    99+
    2023-06-29
  • C++的数据共享与保护你了解吗
    目录1.作用域2.对象生存期静态数据成员静态成员函数3.类的友元友元函数友元类4.共享数据的保护常对象常成员函数常引用Tips总结1.作用域 作用域是一个标识符在程序正文中有效的区域...
    99+
    2022-11-13
  • 如何正确的使用C++ 共享数据保护机制
    本文章向大家介绍如何正确的使用C++ 共享数据保护机制,主要包括{**}的使用实例,应用技巧,基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。(1)常类型  ①常对象:必须进行初始化,不能被更新。  const 类...
    99+
    2023-06-06
  • ASP 中的同步对象:如何保护共享数据?
    在 ASP 网站开发中,共享数据是一项非常重要的功能。但是,当多个用户同时访问同一份数据时,就会产生并发访问的问题。如果不加以处理,这些并发访问可能会导致数据的损坏或不一致。因此,我们需要使用同步对象来保护共享数据。 同步对象是一种特殊的...
    99+
    2023-07-25
    教程 同步 对象
  • 探究JavaScript原型数据共享与方法共享实现
    数据共享 什么样子的数据是需要写在原型中? 需要共享的数据就可以写原型中 原型的作用之一:数据共享 属性需要共享,方法也需要共享: 不需要共享的数据写在构造函数中 ...
    99+
    2022-11-12
  • 微信小程序怎么实现数据共享与方法共享
    微信小程序怎么实现数据共享与方法共享,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。全局数据共享 Mobox原生小程序开发中我们可以通过 mobx-miniprogram 配...
    99+
    2023-06-26
  • 微信小程序如何实现数据共享与方法共享详解
    目录全局数据共享 Moboxnpm安装及其注意事项小程序对 npm 的支持与限制npm 依赖包的安装与使用Mobox组件方法共享 behaviors1. 什么是 behaviors2...
    99+
    2022-11-12
  • C#开发注意事项:数据加密与隐私保护
    C#是一种强大而灵活的编程语言,许多开发人员选择使用C#来构建各种类型的应用程序,包括网站、桌面应用程序和移动应用程序。随着数据安全和隐私保护变得越来越重要,开发人员必须特别关注数据加密和隐私保护方面的技术。本文将重点介绍C#开发中数据加密...
    99+
    2023-11-22
    数据加密 隐私保护 C#开发
  • Static中如何进行C++类的数据共享
    这篇文章给大家介绍Static中如何进行C++类的数据共享,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++语言是对C语言的一个延伸,也就是说,一个C语言的程序,也可以认为是一个C++程序,对于在C++类中,静态成员...
    99+
    2023-06-17
  • Win10怎么开启/关闭共享文件密码保护
    这篇文章将为大家详细讲解有关Win10怎么开启/关闭共享文件密码保护,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Windows 10系统启用/关闭共享文件密码保护的设置方法。第一步:设置文件共享。右键点...
    99+
    2023-06-13
  • Mac 与 Windows 通过网线“直连”共享数据
    文章目录 1. 问题提出2. 必要条件3. 参数设定3.1 网卡参数设定3.2 创建专用的共享用户3.3 配置用户权限3.4 共享参数配置 4. SMB 共享配置5. 效果测试参考文献 ...
    99+
    2023-09-02
    macos windows 5G
  • windows关闭密码保护共享关不了怎么解决
    本篇内容介绍了“windows关闭密码保护共享关不了怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!关闭密码保护共享关不了解决方法:自...
    99+
    2023-07-02
  • nfs实现mysql数据库共享
    两台机器上乂安装mysql/mariadb,和nfs,关闭selinux,取消防火墙nfs server 导出/mydata/目录;centos7,192.158.1.14nfs client挂载/myda...
    99+
    2022-10-18
  • React 数据共享useContext的实现
    因为疫情, 最近接手一个新项目。是React的。上次写React已经过去1年多了。 虽然捡起来也不是什么难事,不过技术这个东西,长时间不用就容易忘记。 为了保证这个项目根其他平行项目...
    99+
    2022-11-13
  • nodejs怎么共享路由数据
    随着Node.js的普及,越来越多的程序员选择使用Node.js来开发web应用程序。在开发过程中,经常需要共享路由数据,这样可以让应用程序更加高效。Node.js提供了一个非常方便的方式来共享路由数据,使用global对象。在本文中,我们...
    99+
    2023-05-24
  • 数据库的共享模式与专有模式是什么
    这篇文章主要介绍“数据库的共享模式与专有模式是什么”,在日常操作中,相信很多人在数据库的共享模式与专有模式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”数据库的共享模式...
    99+
    2022-10-18
  • React中受控组件与数据共享的示例分析
    这篇文章主要介绍React中受控组件与数据共享的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:在HTML当中,像<input>,<textarea...
    99+
    2022-10-19
  • 怎么使用ZeroMQ消息库在C和Python间共享数据
    本篇内容介绍了“怎么使用ZeroMQ消息库在C和Python间共享数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ZeroMQ 提供了一个...
    99+
    2023-06-16
  • PHP中封装性与数据保护的关系
    封装性和数据保护是面向对象编程中的重要概念,PHP作为一种面向对象的编程语言,也具有很好的封装性和数据保护机制。本文将讨论PHP中封装性和数据保护的关系,并给出具体的代码示例。封装性是指将数据和方法封装在一个类中,通过使用访问控制机制来控制...
    99+
    2023-10-21
    数据保护 关系 封装性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作