第47课 父子间的冲突

本文深入探讨了C++中子类与父类成员变量冲突的现象,包括子类如何隐藏父类成员,如何通过作用域分辨符访问父类成员,以及子类与父类成员函数重载的误区。通过实验代码,清晰展示了子类成员函数对父类同名函数的覆盖而非重载。
本文内容来自于对狄泰学院 唐佐林老师 C++深度解析 课程的学习总结

父子间的冲突

子类 可以定义 父类中的 同名成员
子类中的成员将 隐藏父类 中的同名成员
父类中的 同名成员依然存在于子类中
通过 作用域分辨符 (::) 访问父类中的同名成员

访问父类中的同名成员
在这里插入图片描述



实验代码
#include <iostream>

using namespace std;

class Parent
{
public:
    int m_i;
public:
    Parent()
    {
        cout << "Parent &m_i: " << &m_i << endl;
    }
};

class Child : public Parent
{
public:
    int m_i;
public:
    Child()
    {
        cout << "Child &m_i: " << &m_i << endl;
    }
};

int main()
{
    Child c;

    c.m_i = 200;

    cout << "&c.m_i = " << &c.m_i << endl;

    return 0;
}

运行结果
在这里插入图片描述

实验结果:父类和子类都有成员变量 m_i时,c.m_i 调用的是子类的 m_i 成员变量。

若我们想要调用父类的 m_i 变量,更改代码如下:
在这里插入图片描述
运行结果
在这里插入图片描述

再论重载

类中的成员函数可以进行重载

1.重载函数的 本质为多个不同的函数
2.函数名参数列表 是唯一的标识
3.函数重载 必须发生在同一个作用域中

实验编程

编写一个程序来测试类之间的函数重载

#include <iostream>

using namespace std;

class Parent
{
public:
    int m_i;
public:
    Parent()
    {
        cout << "Parent &m_i: " << &m_i << endl;
    }
    void func(int i)
    {
        m_i = i;
    }

    void func(int i, int j)
    {
        m_i = i + j;
    }

};

class Child : public Parent
{
public:
    int m_i;
public:
    Child()
    {
        cout << "Child &m_i: " << &m_i << endl;
    }

    void func(int i, int j, int m)
    {
        m_i = i + j + m;
    }
};

int main()
{
    Child c;

    c.m_i = 10;

    c.func(10);
    c.func(10, 20);
    c.func(10, 20, 30);

    cout << c.m_i << endl;
    

    return 0;
}

编译结果
在这里插入图片描述

实验结果:编译报错。 第48行 和 第 49行 报错,child类中找不到匹配的 func函数。说明child类中的成员函数无法重载parent类中的成员函数,重载必须发生在同一个作用域内。child类中的func成员函数对parent类中的func成员函数进行了同名覆盖。

下面,我们改写程序来显示调用parent类中的func函数
在这里插入图片描述
编译成功,运行结果
在这里插入图片描述

实验结果说明
1.子类中的函数将 隐藏父类的同名函数
2.子类 无法重载 父类中的成员函数
3.使用 作用域分辨符 访问父类中的同名函数
4.子类可以定义父类中 完全相同的成员函数




小结

子类 可以定义 父类中的 同名成员
子类中的成员将 隐藏父类中的同名成员
子类和父类中的函数 不能构成重载关系
子类可以定义父类中 完全相同的成员函数
使用 作用域分辨 符访问父类中的同名成员

阅读引言: 最近在复习之前做过的项目, 所以向将zigbee这个协议分享出来, 一方面可以给需要的人看到, 一方面也方便自己整理zigbee的知识。 目录 一、什么是 ZigBee? 二、Zigbee 通信频段和信道 三、Zigbee协议和Zigbee协议栈 四、ZigBee 联盟与 IEEE 802.15.4 标准的关系 五、Zigbee协议体系结构 六、Zigbee设备在zigbee网络中的角色 七、ZigBee 网络拓补 八、Zigbee寻址方式 九、WIFI、BLE、Zigbee的区别联系 十、Zigbee特点总结 一、什么是 ZigBee? Zigbee是一个短距离的无线通信协议,类似于wifi蓝牙, 在文章的末尾会给出wifi、蓝牙、zigbee协议三者的区别和联系。 ZigBee 标准是基于IEEE802.15.4标准的个域网、低数据速率、短距离无线通信定义的一系列通信协议。基于 ZigBee 的无线设备工作在2.4GHz(全球流行)、915MHz(美国流行)和868MHz(欧洲流行)3个频段上,分别具有最高250kbit/s、40kbit/s和20kbit/s的传输速率。 二、Zigbee 通信频段和信道 频段就是设备在工作时可以使用的一定范围的频率段,信道是在这个频段内可供选择、用于传输信息的通道。ZigBee 物理层工作在 868MHz、915MHz 和 2.4GHz 这三个频段上,这三个频段共计分为 27 个信道,且分别拥有 1 个、10 个、16 个信道。 三、Zigbee协议和Zigbee协议栈 简单来说, 协议栈就是协议的具体实现, 就是有zigbee联盟和ieee组织将zigbee各个层次的功能用代码写好了, 我们可以直接使用, 我们只需要在应用层调用地城封装好的API接口即可完成数据无线传输的功能。我们采用的 Z-Stack 协议栈是 ZigBee 规范的一种具体实现,应用开发人员可在应用层完成代码编写,实现应用项目的相关功能 虽然用起来比较简单, 但是作为嵌入式软件开发者, 我们不需要深入了解底层的射频芯片的工作原理, 但是对嵌入式开发中常见的协议理论基础还是需要的, 而今天的内容就是为这个准备的。 四、ZigBee 联盟与 IEEE 802.15.4 标准的关系 ZigBee 联盟? IEEE 802.15.4是? IEEE 802.15.4是一种针对无线个域网(WPAN)的通信标准,主要用于设备之的低成本、低速率和低功耗的通信。IEEE 802.15.4的主要特点包括: 1. **低速率**:该标准的传输速率为250 kbit/s,最初定义了更低的速率,如20 kbit/s和40 kbit/s,以满足不同应用场景的需求。在当前版本中,还增加了100 kbit/s的速率选项。 2. **短距离**:设计目标是支持大约10米的通信范围,适用于个人空内的设备互联互通。 3. **低功耗**:IEEE 802.15.4旨在降低设备的功耗,使得设备能够在电池供电的情况下长时运行,特别适合于嵌入式设备和传感器网络。 4. **多种物理层**:标准定义了多个物理层选项,以适应不同的应用需求和环境条件,通过权衡传输速率和功耗来支持更多的基础嵌入式设备。 值得一提的是,IEEE 802.15.4常用于智能家居、穿戴设备、工业自动化和物联网等领域,它为这些领域提供了一个稳定、可靠且节能的通信基础。与Wi-Fi等其他无线通信技术相比,IEEE 802.15.4更注重于低成本和低功耗,而不是高带宽或长距离通信。因此,它在需要大量部署且电池寿命要求较长的场景中尤为适用。 Zigbee 的诞生和生长与两个组织密不可分,这两个组织分别是 IEEE 802.15 工作组和 zigbee 联盟。 如下图所示,网络的最下面两层是由 IEEE 802.15.4 标准所定义的, 该标准是由 IEEE802 标准委员会所开发并于 2003 年最初发布的,IEEE 802.15.4 标准定义了无线网络 PHY 层和 MAC 层的详细信息,但它没有为更高的层规定任何要求。 ZigBee 标准仅仅定义了协议的网络层、应用层和安全层,并采用 IEEE 802.15.4 的 PHY 层和 MAC 层作为其部分协议。因此,任何遵循 ZigBee 标准的设备也同样遵循 IEEE 802.15.4 标准。 五、Zigbee协议体系结构 可以结合TCP/IP协议的体系结构来看 (1)APP:应用层,用户创建应用工程的地方。项目的主要内容由应用框架层(AF)、Zigbee设备对象层(ZDO)、应用支持子层(APS)组成。 - 应用框架层(AF):提供了一个如何在Zigbee协议栈上及案例一个规范的描述。它规定了规范的一系列的标准数据类型,协助服务发现的描述符,传输数据的帧格式等等。 - Zigbee设备对象层(ZDO):定义了一个设备在网络中的角色(协调器、路由器或者终端节点),发起或者应答绑定和发现请求,并在网络设备建立一个安全关系。它同时也提供定义了Zigbee设备规范里的一套丰富的管理指令。位于应用框架和应用支持子层之。它描述了一个基本的功能函数类,在应用对象、配置文件(Profile)和应用支持子层之提供了一个接口,满足了ZigBee协议栈所有操作的一般要求。同时,ZDO还具备初始化应用支持子层、网络层、安全服务文档。 - 应用支持子层(APS):负责提供了一个数据服务给应用和Zigbee设备规范。它也提供一个管理服务以维护绑定链接和它字节绑定表的存储。 注意:应用层是ZigBee无线网络中的最高协议层和承载应用的实体。单个设备最多可拥有240个应用实体(应用任务)。 ZigBee协议标准在开发应用时会提供应用协议,应用协议是一组统一的消息格式和处理方法。对某个特定应用而言,使用应用协议可使产品开发者能够在不同厂商生产的产品上使用该应用。比如说,如果两个厂商使用相同的应用协议开发产品,那么一个厂商生产的产品就可以与另一个厂商生产的产品相互交互,这就好像它们都是同一个制造商生产的一样。 (2)NWK:网络层,半开源,核心代码不开源,比如路由算法不开源。 这一层包含有网络层配置参数文件及网络层库的函数接口文件,APS层库的函数接口。主要负责路径选择和数据转发。 - 网络层对MAC和应用层提供接口并管理网络结构和路由。 - 路由通俗的说就是选择一条路径将数据传输到目的设备。在ZigBee网络中,终端设备并没有路由转发的能力,但Zigbee协调器和ZigBee路由器具此功能。 - ZigBee协调器的网络层建立并维持整个网络的正常工作,选择网络的拓扑结构(树状,星型或者对等),保持和终端设备的通讯。此外,Zigbee协调器还能给设备分配标识码的功能。 - 网络层首先确保MAC层具备正常的工作的能力,同时为应用层提供服务接口。 - 网络层包含网络数据实体(NLDE)和网络管理实体(MLME)在内的两个服务实体。 - 其中NLDE提供的服务有:生成网络数据单元:也就是对上层的数据进行分段、封装,以及指定路由拓扑和安全支持。 - MLME提供的服务有:配置新设备,建立新网络,允许设备加入或离开网络,路由的发现邻居寻址。 (3)MAC:包含MAC层的参数配置文件以及MAC的LIB库的函数接口文件。 - 它负责为节点和它的直接邻居之提供可靠的通信链路,提供冲突避免以提高通信效率。帮助避免碰撞和提高效率,MAC层还负责打包和分解数据。 - MAC层主负责产生信标(Beacon)和为信标(beacon-enable网络)同步设备。 - MAC层包含一个管理实体,称为MLME(MAC Layer Management Entity) 。 - MLME负责维护和MAC子层相关的管理目标数据库,也就是MAC子层的PAN信息数据库。 六、Zigbee设备在zigbee网络中的角色 ZigBee 标准将网络节点按照功能划分为三种类型:PAN协调器(Personal Area Network Zigbee Coordinator, ZC)、路由器(ZigBee Router, ZR)和终端设备(ZigBee EndDevice, ZE)。 协调器:一个 ZigBee 网络中仅有一个协调器,是 PAN 的总控制器。其职责包括: - 为网络中每个设备分配一个唯一地址; - 初始化、终止、转发网络中的消息; - 为网络选择一个唯一的 PAN 标识符,使得网络中的设备可以使用 16 位短地址进行通信。 路由器:主要负责允许设备加入网络、扩展网络覆盖的物理范围以及数据包路由的功能。 终端设备:主要负责无线网络数据的采集。 注意: - 协调器启动并建立网络后,首先选择网络标识符,并将自己短地址设置为0x0000,然后开始向邻近的设备发送信标,接受其他设备的连接,形成树的第一级。协调器与这些设备之形成父子关系。 - 与协调器建立了连接的设备都会被分配一个16位的网络地址,称为短地址。如果设备以终端设备的身份接入网络,则协调器会为它分配一个唯一的16位网络地址;如果设备以路由器的身份与网络建立连接,则协调器会为它分配一个地址块,包含有若干16位短地址。 - 路由器根据接收到的协调器信标的信息,配置并发送它自己的信标,允许其他设备与自己建立连接,成为其子设备。这些子设备中可以有路由器,它们可以有自己的子设备,如此下去形成多级树簇型结构的网络。 七、ZigBee 网络拓补 ZigBee 网络支持星状、树(簇)状、网状三种网络拓补结构 星状网络:在星状网络中,所有的终端设备都只与 PAN 协调器通信。且只允许 PAN 协调器与终端设备通信,终端设备和终端设备不能直接通信,终端设备的消息通信需通过 PAN协调器进行转发。 簇(树)状网络:由一个 PAN 协调器和一个或多个星状网络结构组成。终端设备可以选择加入 PAN 协调器或者路由器。设备能与自己的父节点或子节点直接通信,但与其他设备的通信只能依靠树状节点组织路由进行。 网状网络:网状网络中任意两个路由器能够直接通信,且具有路由功能的节点不用沿着树来通信而可以直接把消息发送给其它的路由节点。 八、Zigbee寻址方式 Zigbee 网络有两种类型的地址:扩展地址、短地址。 扩展地址:又称 IEEE 地址、MAC 地址。扩展地址位数为 64 位,由设备商固化在设备里。任何 zigbee 网络设备都具有全球唯一的扩展地址,在 PAN 网络中,此地址可以直接用于通信。 短地址:又称为网络地址,它用于在本地网络中标识设备节点。 短地址位数为 16 位。在协调器建立网络后,使用 0x0000 作为 自己的短地址,在设备需要关联得时候,由父设备分配 16 位短地址。设备可以使用 16 位短地址在网络中进行通信。不同的zigbee 网络可能具有相同的短地址。 OK, 关于zigbee的理论知识分享到此结束,希望对需要的人有所帮助。哦还有wifi, 蓝牙, zigbee三者的对比每写。 九、WIFI、BLE、Zigbee的区别联系 WiFi、BLE(蓝牙低功耗技术)和Zigbee都是无线通信技术,但它们在应用场景和技术特性上存在一些差异。 - **WiFi**:传输速率高,通常用于大规模数据传输和宽带网络接入。它的覆盖范围较大,非常适合家庭和办公室环境内的网络连接。WiFi适用于高速上网、视频流媒体、大文件传输等带宽密集型活动。 - **BLE**:是一种专为低功耗应用设计的无线通信协议,主要针对需要长时待机和使用电池供电的设备。BLE的通信距离较短,适合近距离通信,如智能手表、健康监测设备和一些物联网设备之的数据同步。 - **Zigbee**:是低速、低功耗、低成本的短距离无线通信技术,特别适合于大规模的传感器网络和自组织网状网络。Zigbee的传输速率相对较低,但可以提供稳定可靠的通信,因此常被用于智能家居、工业控制等领域。 十、Zigbee特点总结 学习这个zigbee知识的心得体会2500字用专业的语句描述
最新发布
06-30
### Zigbee协议技术总结 Zigbee是一种基于IEEE 802.15.4标准的低功耗、短距离无线通信协议,广泛应用于物联网(IoT)和智能家居领域。其设计目标是实现低复杂度、低成本和低功耗的无线网络连接[^3]。 #### 协议结构 Zigbee协议栈由多个层次组成,包括物理层(PHY)、媒体访问控制层(MAC)、网络层(NWK)、安全层(SL)和应用层(APL)。其中: - **物理层**负责在无线信道上传输原始比特流,定义了发射频率、调制方式、发射功率以及接收机的灵敏度等关键技术参数[^1]。 - **媒体访问控制层**处理物理层面上相连节点之的数据通信,提供稳定可靠的通信链路,并支持CSMA/CA机制以避免冲突[^5]。 - **网络层**负责网络拓扑结构的建立和管理,包括网络地址分配、路由寻址等功能[^3]。 - **安全层**为数据帧提供完整性与安全性保障,支持128位AES加密算法[^3]。 - **应用层**由ZigBee设备对象、应用支持子层以及制造商定义的应用对象组成,负责设备角色定义、服务发现与绑定等[^2]。 #### 通信频段 Zigbee协议的物理层定义了三种不同的工作频段:2.4 GHz(全球通用)、915 MHz(美洲地区)和868 MHz(欧洲地区),这些频段的选择确保了不同地区的兼容性。 #### 设备角色 Zigbee网络中存在三种主要设备角色: - **协调器(Coordinator)**:负责启动网络并作为网络的核心节点,通常只有一个协调器存在于网络中。 - **路由器(Router)**:可以转发数据包,扩展网络覆盖范围,支持多跳通信。 - **终端设备(End Device)**:仅能与父节点通信,不参与路由功能,适用于低功耗场景。 #### 网络拓扑 Zigbee支持多种网络拓扑结构,包括星型(Star)、网状(Mesh)和簇树(Cluster Tree)结构。其中,网状网络因其自愈能力和高可靠性而被广泛应用。 #### 寻址方式 Zigbee采用16位短地址和64位IEEE长地址相结合的方式进行寻址。每个设备在网络中都有一个唯一的64位IEEE地址,而在加入网络后会被分配一个16位的短地址用于快速寻址[^3]。 #### 与WiFi、BLE的区别 | 特性 | Zigbee | WiFi | BLE | |------|--------|------|-----| | 功耗 | 极低 | 高 | 低 | | 数据速率 | 20~250 kbps | 高达数百Mbps | 1 Mbps | | 传输距离 | 10~100米 | 几十米 | 10~100米 | | 网络容量 | 支持大量设备(>65,000) | 有限 | 有限 | | 应用场景 | 智能家居、工业自动化 | 高带宽需求场景 | 可穿戴设备、信标 | #### 特点与应用场景 Zigbee的主要特点包括低功耗、低成本、自组织网络能力以及强大的安全性。这些特性使其非常适合以下应用场景: - **智能家居**:如灯光控制、温度调节、安防系统等。 - **工业自动化**:传感器网络、远程监控等。 - **医疗健康**:可穿戴设备、远程病人监测。 - **智能能源管理**:电力计量、能耗优化。 ```python # 示例:Zigbee设备发现伪代码 def discover_devices(): # 初始化Zigbee协调器 coordinator = ZigbeeCoordinator() # 开始设备发现过程 devices = coordinator.start_discovery(timeout=10) # 输出发现的设备列表 for device in devices: print(f"Found device: {device.ieee_address}, Type: {device.device_type}") # 调用函数执行设备发现 discover_devices() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzg2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值