编辑:添加.h文件。
#pragma once
#include "Screen.h"
#include "../IniParams.h"
class AtcParamsMenu : public Screen
{
public:
AtcParamsMenu(ScreenManager *screenMgr, MenuTypes MenuType, IniParams *Params);
~AtcParamsMenu();
private:
enum eFields
{
make,
model,
connector
};
void processKey();
void updateScreen(bool refreshAll);
void selectMaker();
void deSelectMaker();
void setMaker(AtcManufacturer maker);
void setModel();
void setCabinetType();
unsigned char idx;
unsigned char fieldIdx;
const unsigned char addY;// = 1
const unsigned char xIdx;// = 14
const unsigned char dispXidx; // = 15
const unsigned char fieldLen; // = 9
static const eFields minField = make;
static const eFields maxField = connector;
IniParams *params;
MenuTypes menuType;
};
这是一个类构造函数。
注意最后4个变量是来自.h文件的常量无符号字符。这不是基类,但我不想为这些使用静态。
这被认为是“干净”吗?初始化常量的方法?我的一些课程最终可能会有7或8个课程。
AtcParamsMenu::AtcParamsMenu(ScreenManager *screenMgr, MenuTypes MenuType, IniParams *Params) :
Screen(screenMgr), addY(1), xIdx(14), dispXidx(15), fieldLen(9)
答案 0 :(得分:1)
我们看不到足够的代码来对情况进行全面审核,但这里有一些注意事项:
对于像这样的简单初始化程序,因为C ++ 11可以内联提供它们:
struct Foo
{
ScreenManager* screenMgr;
const int myConstant = 42;
Foo(ScreenManager* screenMgr);
};
Foo::Foo(ScreenManager* screenMgr)
: screenMgr(screenMgr)
{}
但是,由于初始化根本不依赖于任何输入,并且看起来不是特定于实例的,因此它们应该可能是static const
,尽管您的预订
如果它们是static const
,则不要在构造函数中初始化它们,而是单独定义它们。像这样:
struct Foo
{
static const int myConstant;
ScreenManager* screenMgr;
Foo(ScreenManager* screenMgr);
};
const int Foo::myConstant = 42;
Foo::Foo(ScreenManager* screenMgr)
: screenMgr(screenMgr)
{}
答案 1 :(得分:0)
在c ++ 11中,您可以直接在看起来更清晰的类声明中进行初始化:
class AtcParamsMenu
{
const int addY = 1;
const int xIdx = 14;
};