zoukankan      html  css  js  c++  java
  • 面向对象实验 ——(三)数据的保护与共享

    C++静态成员和友元成员的理解
    面向对象-数据保护与共享-常模块
    写了一节课 极度卑微

    一、实验目的及要求

    内容:
    (1)定义一个具体的类,要求该类中用到类的静态成员和友元;
    (2)案例要具有一定的实际功能。
    要求:
    (1)理解类的静态成员含义,掌握静态成员的适用场合及使用方法;
    (2)掌握友元函数及友元类的用法;
    (3)记录并分析实验结果,撰写实验报告。

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

    1.静态成员

    (1)定义
    对于一个类来说,函数成员是所有对象都相同的,数据成员则是各自不同的。如果引入一个新的数据成员,对于所有的对象来说,它的值都是相同的,此时如果再去对每一个对象定义一次此数据成员则显得冗杂,由此,我们引入了静态数据成员。
    根据上一段话,可以大体得出静态成员的定义:是类共有的数据,类的所有成员都维护这一个数据。
    (2)语法:
    static int exnum;///静态数据成员
    (3)存储
    因为静态数据成员是类共有的成员,所以他并不会占用对象的内存空间
    更加有关的了解可以看博客

    (4)初始化
    int A::exnum=0;
    “::”是预作用符,表示后面的操作对象属于哪个类。
    (5)访问
    由于对象具有静态成员访问权,所以我们可以通过对象来访问静态成员
    。但是有时候,我们还没有构造对象,这时候就可以直接通过类名来访问静态成员
    (6)静态函数的调用
    在(5)中我们了解到了有两种访问静态成员的方式,理论上由于静态成员属于类,根据类名直接访问静态成员是可行的,但是由于exnum是私有的数据成员,由于模块的安全性,语法并不支持这种操作。
    这时候我们希望某些函数的调用也不依赖于对象,就可以再引进一个静态函数了,与静态数据成员类似,这一函数也是属于类,由类直接调用。
    语法定义如下:
    在这里插入图片描述
    代码:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    运行结果如下:
    构造函数
    构造函数
    (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)友元类
    如果想要一个类里的函数都变为另一个类里的友元函数,
    可以直接逐个把其变为友元函数,但这样显得过于繁杂,
    所以我们也可以将该类变为友元类,语法是先在类前加前向声明,
    再在类内定义说明
    在这里插入图片描述

    代码:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.常模块

    (1)定义:
    出于数据保护与共享,出现了常模块。顾名思义,常模块就是构造后数据不允许变化的模块。
    (2)常数据成员:
    常数据成员:在对象构造后其值不会改变,所以必须在构造时对其进行初始化
    保护机制:任何的函数都无法修改其值
    常函数成员:不允许修改数据成员的一个函数成员
    (3)保护机制:
    常对象的保护机制:
    1.任何函数都无法修改其值
    2.常对象调用函数成员时必须保证该函数没有修改常对象的值
    (4)函数的调用
    由于保护机制,常对象不能调用普通函数
    普通对象可以调用常函数,也能调用普通函数,后者优先
    (5)常引用
    不能通过引用的方式改变对象的值,但是原先的数据是可以改变的
    代码:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    运行结果:

    cnt=0
    构造函数
    cnt=1
    构造函数
    cnt=2
    析构函数
    cnt=1
    构造函数
    常函数
    构造函数
    普通函数
    析构函数
    析构函数
    析构函数

    4.实验代码:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    运行结果:

    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的值应当累加。

  • 相关阅读:
    JID 2.0 RC4 发布,高性能的 Java 序列化库
    FBReaderJ 1.6.3 发布,Android 电子书阅读器
    Arquillian 1.0.3.Final 发布,单元测试框架
    JavaScript 的宏扩展 Sweet.js
    Hypertable 0.9.6.5 发布,分布式数据库
    JRuby 1.7.0 发布,默认使用 Ruby 1.9 模式
    httppp 1.4.0 发布,HTTP响应时间监控
    Redis 2.6.0 正式版发布,高性能K/V服务器
    OfficeFloor 2.5.0 发布,IoC 框架
    XWiki 4.3 首个里程碑发布
  • 原文地址:https://www.cnblogs.com/OvOq/p/14853126.html
Copyright © 2011-2022 走看看