单件模式中的祖先类调用后代类虚函数有关问题
单件模式中的祖先类调用后代类虚函数问题
一个嵌入式系统程序中的C++代码如下:
//------------------- USBHAL.h -----------------------
class USBHAL
{
public:
...............
protected:
virtual bool fun00(){return false;};
virtual bool fun01(){return false;};
virtual bool fun02(){return false;};
virtual bool fun03(){return false;};
virtual bool fun04(){return false;};
...................
private:
void usbisr(void);
static void _usbisr(void);
static USBHAL* instance;
bool (USBHAL::*epCallback[6])(void);
};
class USBDevice: public USBHAL
{
...............
};
class USBMSD: public USBDevice
{
protected:
virtual bool fun00();
virtual bool fun01();
};
//------------------ USBHAL.cpp ----------------------
#include "USBHAL.h"
USBHAL * USBHAL::instance;
USBHAL::USBHAL(void){
....................
epCallback[0]=&USBHAL::fun00;
epCallback[1]=&USBHAL::fun01;
epCallback[2]=&USBHAL::fun02;
epCallback[3]=&USBHAL::fun00;
....................
instance = this;
NVIC_SetVector(IRQn, (uint32_t)&_usbisr);//将 _usbisr设为中断函数
....................
}
void USBHAL::_usbisr(void){
instance->usbisr();
}
void USBHAL::usbisr(void){
bool m;
...................
m = (instance->*(epCallback[i]))();
...................
}
问题:
由中断触发函数指针调用(最后代码),会调用后代类的虚函数吗?
------解决方案--------------------
都单件了,还继承啥啊。
------解决方案--------------------
3楼正解, 单例, 构造函数一般是private, 不能继承
------解决方案--------------------
你这是单例模式?
复制控制成员不要私有化?
所谓单例一般只有一个static对象供使用,你继承什么呢?
一个嵌入式系统程序中的C++代码如下:
//------------------- USBHAL.h -----------------------
class USBHAL
{
public:
...............
protected:
virtual bool fun00(){return false;};
virtual bool fun01(){return false;};
virtual bool fun02(){return false;};
virtual bool fun03(){return false;};
virtual bool fun04(){return false;};
...................
private:
void usbisr(void);
static void _usbisr(void);
static USBHAL* instance;
bool (USBHAL::*epCallback[6])(void);
};
class USBDevice: public USBHAL
{
...............
};
class USBMSD: public USBDevice
{
protected:
virtual bool fun00();
virtual bool fun01();
};
//------------------ USBHAL.cpp ----------------------
#include "USBHAL.h"
USBHAL * USBHAL::instance;
USBHAL::USBHAL(void){
....................
epCallback[0]=&USBHAL::fun00;
epCallback[1]=&USBHAL::fun01;
epCallback[2]=&USBHAL::fun02;
epCallback[3]=&USBHAL::fun00;
....................
instance = this;
NVIC_SetVector(IRQn, (uint32_t)&_usbisr);//将 _usbisr设为中断函数
....................
}
void USBHAL::_usbisr(void){
instance->usbisr();
}
void USBHAL::usbisr(void){
bool m;
...................
m = (instance->*(epCallback[i]))();
...................
}
问题:
由中断触发函数指针调用(最后代码),会调用后代类的虚函数吗?
------解决方案--------------------
都单件了,还继承啥啊。
------解决方案--------------------
3楼正解, 单例, 构造函数一般是private, 不能继承
------解决方案--------------------
你这是单例模式?
复制控制成员不要私有化?
所谓单例一般只有一个static对象供使用,你继承什么呢?