您的位置:首页 > 编程语言 > C语言/C++

C语言使用技巧3:C++中子类调用父类重载函数的方法

2017-09-14 22:55 507 查看
    在项目中遇到如下问题,请看程序。

    父类中声明了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);
}; 

    这样,就解决了该问题。

    原创性文章,转载请注明出处 http://user.qzone.qq.com/2756567163。 
    CSDN:http://blog.csdn.net/qingwufeiyang12346。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 父类 子类 重载 覆盖
相关文章推荐