面向对象实验 ——(三)数据的保护与共享

简介: 面向对象实验 ——(三)数据的保护与共享

C++静态成员和友元成员的理解

面向对象-数据保护与共享-常模块

写了一节课 极度卑微

一、实验目的及要求

内容:

(1)定义一个具体的类,要求该类中用到类的静态成员和友元;

(2)案例要具有一定的实际功能。

要求:

(1)理解类的静态成员含义,掌握静态成员的适用场合及使用方法;

(2)掌握友元函数及友元类的用法;

(3)记录并分析实验结果,撰写实验报告。

二、实验过程及实验结果分析

1.静态成员

(1)定义

对于一个类来说,函数成员是所有对象都相同的,数据成员则是各自不同的。如果引入一个新的数据成员,对于所有的对象来说,它的值都是相同的,此时如果再去对每一个对象定义一次此数据成员则显得冗杂,由此,我们引入了静态数据成员。

根据上一段话,可以大体得出静态成员的定义:是类共有的数据,类的所有成员都维护这一个数据。

(2)语法:

static int exnum;///静态数据成员

(3)存储

因为静态数据成员是类共有的成员,所以他并不会占用对象的内存空间

更加有关的了解可以看博客


(4)初始化

int A::exnum=0;

“::”是预作用符,表示后面的操作对象属于哪个类。

(5)访问

由于对象具有静态成员访问权,所以我们可以通过对象来访问静态成员

。但是有时候,我们还没有构造对象,这时候就可以直接通过类名来访问静态成员

(6)静态函数的调用

在(5)中我们了解到了有两种访问静态成员的方式,理论上由于静态成员属于类,根据类名直接访问静态成员是可行的,但是由于exnum是私有的数据成员,由于模块的安全性,语法并不支持这种操作。

这时候我们希望某些函数的调用也不依赖于对象,就可以再引进一个静态函数了,与静态数据成员类似,这一函数也是属于类,由类直接调用。

语法定义如下:

20200401134307494.png

代码:

20200401134307494.png

20200401134307494.png

20200401134307494.png

运行结果如下:

构造函数

构造函数

(1,2,3)

(4,5,6)

调用函数功能进行成员的输出

(1,2,3)

sum=21

直接操作进行数据成员的输出

1 2 3 21

sum=21

sum=21

2 .友元函数

(1) 定义

如果一个类允许某外部函数具有其成员函数的权限

即可以直接访问类内成员,那么在该类的定义中应当声明此函数为友元函数

(2)语法

friend double MyDistance( MyPoint& pb,MyPoint& pe);

(3)其他

如果友元函数时全局函数,直接声明即可

但如果该友元函数是某个类中的函数,需要加预作用符说明该函数属于哪一类

(4)友元类

如果想要一个类里的函数都变为另一个类里的友元函数,

可以直接逐个把其变为友元函数,但这样显得过于繁杂,

所以我们也可以将该类变为友元类,语法是先在类前加前向声明,

再在类内定义说明

20200401134307494.png

代码:

20200401134307494.png

20200401134307494.png

20200401134307494.png

3.常模块

(1)定义:

出于数据保护与共享,出现了常模块。顾名思义,常模块就是构造后数据不允许变化的模块。

(2)常数据成员:

常数据成员:在对象构造后其值不会改变,所以必须在构造时对其进行初始化

保护机制:任何的函数都无法修改其值

常函数成员:不允许修改数据成员的一个函数成员

(3)保护机制:

常对象的保护机制:

1.任何函数都无法修改其值

2.常对象调用函数成员时必须保证该函数没有修改常对象的值

(4)函数的调用

由于保护机制,常对象不能调用普通函数

普通对象可以调用常函数,也能调用普通函数,后者优先

(5)常引用

不能通过引用的方式改变对象的值,但是原先的数据是可以改变的

代码:

20200401134307494.png

20200401134307494.png

20200401134307494.png

20200401134307494.png

运行结果:

cnt=0

构造函数

cnt=1

构造函数

cnt=2

析构函数

cnt=1

构造函数

常函数

构造函数

普通函数

析构函数

析构函数

析构函数

4.实验代码:

20200401134307494.png

20200401134307494.png20200401134307494.png

运行结果:


point构造函数

point构造函数

以下为a的信息:

x=1

y=2

以下为b的信息:

x=3

y=4

总共的数据成员之和为10

析构函数

析构函数


过程分析:


先是生成两个point对象a,b

然后打印出a,b的信息

调用友元函数qask_sum函数展现从开始到现在的所有数据成员之和

由于sum是静态数据成员,为类共有,所以sum的值应该是a,b的所有数据成员之和。如果有其他的对象,sum的值应当累加。


目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型的特点、重要概念及工作方式详解
大模型是具有大量参数和复杂结构的深度学习模型,通过处理大量数据实现高效任务解决。其特点包括参数规模庞大、深层网络结构、预训练与微调、多任务学习和自适应能力。重要概念有注意力机制、Transformer架构、迁移学习和分布式训练。大模型的工作方式包括输入处理、特征提取、预测与损失计算、反向传播与优化,以及评估与微调。这些特性使其在自然语言处理、计算机视觉等领域取得显著进展。
274 0
|
7月前
|
敏捷开发 编解码 测试技术
【测试】1. 概念 + 基础篇
【测试】1. 概念 + 基础篇
88 1
|
存储 网络协议 API
网络基础编程
网络基础编程
66 0
|
程序员 人机交互 C++
操作系统的发展和分类,概念,它的运行机制和体系结构,以及和它相关的特征,功能和目标,
操作系统的发展和分类,概念,它的运行机制和体系结构,以及和它相关的特征,功能和目标,
132 0
|
编译器 C语言
编译原理(三)目标代码的生成与优化基本概念
编译原理(三)目标代码的生成与优化基本概念
173 0
|
人工智能 编解码 网络协议
计算机实验基础要点
第一台计算机ENIAC 1946年 计算机发展:电子管计算机,晶体管计算机,集成电路计算机,大规模集成电路计算机 计算机分类:超级计算机,大型计算机,小型计算机,微型计算机,嵌入式计算机, 计算机特点:速度快,精度高,存储容量大,具有逻辑判断能力,自动化程度高,可与通信网络互联 计算机应用:1科学计算2数据处理3辅助技术4过程控制5人工智能 计算机系统组成:1硬件2指令3程序4软件
98 0
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础
关于图和实例的学习之相关概念个人理解
关于图和实例的学习之相关概念个人理解
124 0
关于图和实例的学习之相关概念个人理解
|
测试技术 uml 数据安全/隐私保护
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)
301 0
【UML 建模】UML建模语言入门-视图,事物,关系,通用机制(二)