博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言使用技巧3:C++中子类调用父类重载函数的方法
阅读量:2041 次
发布时间:2019-04-28

本文共 1317 字,大约阅读时间需要 4 分钟。

    在项目中遇到如下问题,请看程序。
    父类中声明了
SendData
函数
class CUart
{
public:
    UART_HandleTypeDef hUART;
    uint8_t u8_UartReceiveBuffer[1];
public:
    CUart(uint8_t u8_UartNumber, uint32_t u32_BaudRate);
    void SendData(uint8_t* pData, uint8_t u8_Size);
};
    子类对
SendData函数进行了重载。
class CSevenBytesUART:public CMiniUART
{
public:
    uint8_t u8_Command;
    uint8_t u8_Data1;
    uint8_t u8_Data2;
    uint8_t u8_Data3;
public:
    CSevenBytesUART(uint8_t u8_UartNumber, uint32_t u32_BaudRate);
    void SendData(uint8_t u8_Command, uint8_t u8_Data1, uint8_t u8_Data2, uint8_t u8_Data3);
    boolean IsCorrectDataPack(void);
};
 
    在main.c中调用父类的
SendData函数程序报错,报错信息是不认识父类的SendData函数。
while(1)
{
    Target.Delayms(1000);
    Target.HAL.DeviceUart.SelectDevice(0);
    if (Target.HAL.DeviceUart.IsReceivedData() == TRUE)
    {
        Target.HAL.DeviceUart.SendData(Target.HAL.DeviceUart.u8_Buffer, (uint8_t)Target.HAL.DeviceUart.u16_Number);
    }
}
 
    原因:实际上在子类中声明与父类同名的函数,不应称做重载,而应称做覆盖。
    
    解决方法:在子类中引入父类的同名函数即可,使用的语句是using,程序如下:
class CSevenBytesUART:public CMiniUART
{
public:
    uint8_t u8_Command;
    uint8_t u8_Data1;
    uint8_t u8_Data2;
    uint8_t u8_Data3;
public:
    CSevenBytesUART(uint8_t u8_UartNumber, uint32_t u32_BaudRate);
    using CMiniUART::SendData;
    void SendData(uint8_t u8_Command, uint8_t u8_Data1, uint8_t u8_Data2, uint8_t u8_Data3);
    boolean IsCorrectDataPack(void);
};
 
    这样,就解决了该问题。
    原创性文章,转载请注明出处 
 
    CSDN:
 
你可能感兴趣的文章
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>