- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我遇到的情况是,我发现将对象的类型(作为枚举)存储在基类中以根据该值进一步将指向该基类的指针转换为子类指针很方便类型。
例如:
class CToken
{
public:
token_type_e eType;
};
class COperatorToken : public CToken
{
public:
// Sub class specific stuff
};
class CLiteralToken : public CToken
{
public:
// Sub class specific stuff
};
然后
vector<CToken *> aTokens;
//...
for( size_t nI = 0, nMaxI = aTokens.size(); nI < nMaxI; ++nI )
{
switch( aTokens[ nI ]->eType )
{
case E_OPERATOR :
// Do something with sub-class specific stuff.
break;
case E_LITERAL :
// Do something with sub-class specific stuff.
break;
}
}
这是一种不好的做法吗?
谢谢你:)
编辑:
假设我正在分析我的 token 列表。在某些时候,我想检查当前 token 是否是一个运算符,正如人们建议的那样,使用虚函数 virtual bool isOperator()
。现在,如果它是一个运算符,我将想要访问该子类特定的东西以找出它是哪种类型的运算符。在那种情况下,我该怎么办?我不能在我的基类中添加方法 getOperatorType(),那没有意义。除了强制转换为子类以检索该子类成员值之外,还有其他方法吗?
最佳答案
类型字段确实破坏了 C++ 面向对象的特性。通常你可以用多态性来解决这个问题:
在 CToken
中定义一个函数 virtual doSomething()
,具有适当的参数和返回类型。
在 COperatorToken
和 CLiteralToken
中实现该函数。
如果您随后使用 aTokens[ nI ]->doSomething();
关于C++ - 好的还是坏的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904235/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!