我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++ 数据共享与保护

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++ 数据共享与保护

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++ 数据共享与保护内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++ 数据共享与保护

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

下载Word文档

猜你喜欢

C++的数据共享与保护实例分析

这篇文章主要讲解了“C++的数据共享与保护实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++的数据共享与保护实例分析”吧!1.作用域作用域是一个标识符在程序正文中有效的区域作用域关
2023-06-29

如何正确的使用C++ 共享数据保护机制

本文章向大家介绍如何正确的使用C++ 共享数据保护机制,主要包括{**}的使用实例,应用技巧,基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。(1)常类型  ①常对象:必须进行初始化,不能被更新。  const 类
2023-06-06

Hadoop安全性与数据保护

Hadoop是一个开源的分布式存储和计算框架,提供了高可靠性和高可扩展性的数据处理能力。然而,由于其分布式的特性,Hadoop系统面临着一些安全性和数据保护方面的挑战。以下是一些关于Hadoop安全性和数据保护的注意事项:访问控制:Hado
Hadoop安全性与数据保护
2024-02-29

微信小程序怎么实现数据共享与方法共享

微信小程序怎么实现数据共享与方法共享,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。全局数据共享 Mobox原生小程序开发中我们可以通过 mobx-miniprogram 配
2023-06-26

C#开发注意事项:数据加密与隐私保护

C#是一种强大而灵活的编程语言,许多开发人员选择使用C#来构建各种类型的应用程序,包括网站、桌面应用程序和移动应用程序。随着数据安全和隐私保护变得越来越重要,开发人员必须特别关注数据加密和隐私保护方面的技术。本文将重点介绍C#开发中数据加密
C#开发注意事项:数据加密与隐私保护
2023-11-22

Win10怎么开启/关闭共享文件密码保护

这篇文章将为大家详细讲解有关Win10怎么开启/关闭共享文件密码保护,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Windows 10系统启用/关闭共享文件密码保护的设置方法。第一步:设置文件共享。右键点
2023-06-13

windows关闭密码保护共享关不了怎么解决

本篇内容介绍了“windows关闭密码保护共享关不了怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!关闭密码保护共享关不了解决方法:1
2023-07-02

Static中如何进行C++类的数据共享

这篇文章给大家介绍Static中如何进行C++类的数据共享,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++语言是对C语言的一个延伸,也就是说,一个C语言的程序,也可以认为是一个C++程序,对于在C++类中,静态成员
2023-06-17

共享数据库连接

一分耕耘,一分收获!既然都打开这篇《共享数据库连接》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮
共享数据库连接
2024-04-05

Hadoop与数据隐私保护的挑战与应对

Hadoop开源的分布式存储和计算框架,广泛应用于大数据处理领域。然而,由于其本身的设计和特性,Hadoop在处理数据隐私保护方面存在一些挑战。以下是Hadoop在数据隐私保护方面的挑战以及相应的解决方案:数据泄露风险:在Hadoop集群中
Hadoop与数据隐私保护的挑战与应对
2024-02-29

PHP中封装性与数据保护的关系

封装性和数据保护是面向对象编程中的重要概念,PHP作为一种面向对象的编程语言,也具有很好的封装性和数据保护机制。本文将讨论PHP中封装性和数据保护的关系,并给出具体的代码示例。封装性是指将数据和方法封装在一个类中,通过使用访问控制机制来控制
2023-10-21

Docker存储卷:数据持久化与共享策略

在Docker中,存储卷是一种用来持久化数据的机制,可以让容器中的数据在容器删除后仍然保留。存储卷可以用来实现数据共享、备份与恢复等功能。下面是一些关于Docker存储卷的数据持久化与共享策略:数据持久化:使用存储卷可以实现容器中数据的持久
Docker存储卷:数据持久化与共享策略
2024-04-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录