打印
[应用相关]

C++中子类调用父类同名函数的处理方法

[复制链接]
1973|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guanjiaer|  楼主 | 2019-7-4 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、问题
父类有1方法:Enable_RS485,如下所示:

class CUart
{
public:
        uint8_t u8_UartNumber;                                                //端口号1-8
        uint32_t u32_BaudRate;                                                //波特率
        uint8_t u8_Parity;                                                                //效验位
        CC0 C0;                                                                                                                //485控制引脚C0
        CC1 C1;                                                                                                                //485控制引脚C1
        UART_HandleTypeDef hUART;
        uint8_t u8_UartReceiveBuffer[1];
public:
        CUart(uint8_t u8_UartNumber, uint32_t u32_BaudRate, uint8_t u8_Parity);
        void Init(uint8_t u8_UartNumber, uint32_t u32_BaudRate, uint8_t u8_Parity);
        void Enable_RS485(GPIO_TypeDef* C0_Port, uint16_t C0_Pin, GPIO_TypeDef* C1_Port, uint16_t C1_Pin);
        void SendDataPrimitive(uint8_t* pData, uint16_t u16_Size);
        void SetBaudRate(uint32_t u32_BaudRate);
        void Set_RS485(uint8_t u8_Mode);
};


使用特权

评论回复
沙发
guanjiaer|  楼主 | 2019-7-4 11:42 | 只看该作者
子类有其同名的方法,如下所示:

class CUartCommunication:public CMiniUART
{
public:
        CUartCommunication(void);       
        void Enable_RS485(void);
};
并且子类还需调用父类的同名方法,如下所示:

void CUartCommunication::Enable_RS485(void)
{
        this->Enable_RS485(PORTA, PIN1, PORTC, PIN12);
}
如果按照上述方法编写程序,则编译时不通过的,原因在于父类的同名方法被隐藏。



使用特权

评论回复
板凳
guanjiaer|  楼主 | 2019-7-4 11:42 | 只看该作者
2、解决
可以使用using解决当前问题,如下所示:

class CUartCommunication:public CMiniUART
{
public:
        CUartCommunication(void);
        using CUart::Enable_RS485;
        void Enable_RS485(void);
};
使用using后,父类的同名函数就不再隐藏,可以直接调用了。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

4116

帖子

2

粉丝