На мой взгляд sizeof(machine) выдаст размер массива в байтах. Размер указателя скорее всего не 1 байт. А вообще я Вас поддерживаю. Пишу под IAR для stm32, использую C++ и наследование. Без фанатизма, но использую.
Вот пример реального базового класса, который я использую.
class TListView {
private:
int m_cur_pos;
int m_init_pos;
u8 m_cur_line;
u8 m_num_lines;
u8 m_step_lines;
char *m_header;
portTickType WheelPressTime;
void DrawSelector(u8 y);
void ClearSelector(u8 y);
void DrawScrollbar(void);
public:
TListView() { m_cur_pos=0; m_init_pos=0; m_cur_line=0; m_header= 0; WheelPressTime=0; }
void PaintScreen(void);
u8 ProcessKeys(u8 key);
void SetHeader(char *val) { m_header= val; }
void SetInitPos(int val) { m_init_pos= val; }
virtual int GetCount(void) { return 0; }
virtual char *GetItem(int index) { return 0; }
virtual int GetPos(void) { return m_cur_pos; }
};
Так он используется
const int cnt= 12;
char *a[cnt]={
"Item1", "Item2", "Item3", "Item4",
"Item5", "Item6", "Item7", "Item8",
"Item9", "Item10", "Item11", "Item12"};
class TExList: public TListView {
public:
virtual char * GetItem(int index) { return a[index]; }
virtual int GetCount(void) { return cnt; }
};
А в другом месте так
static char *seal_list;
static int seal_list_count= 0;
class TSealListView: public TListView {
public:
virtual char * GetItem(int index) { return &seal_list[index*16]; }
virtual int GetCount(void) { return seal_list_count; }
};