小编Joh*_*ohm的帖子

什么是结构化分析的数据流图的UML模拟?

回到黑暗时代(20世纪80年代中期),我使用了结构化分析中数据流图,并且发现它们非常有用.

我现在的雇主喜欢UML.我通常使用BOUML,它不执行非UML绘图.

什么是与数据流图对应的UML图?

如果没有,推荐的UML图表会显示相应的数据吗?

uml dataflow-diagram

24
推荐指数
2
解决办法
4万
查看次数

控制枚举值的可见性

考虑一个C++类,它导出一个枚举,在该枚举上维护一个内部数组,并希望导出一个接受枚举值的命令.

class foo {
public:
  enum color {
    red,
    yellow,
    green,
    NUM_COLORS
  };
private:
  something somebody[NUM_COLORS];
public:
  void command(color c);
};
Run Code Online (Sandbox Code Playgroud)

是否有一种干净的方法只能导出实际颜色,而不是NUM_COLORS?当编译器的类型系统真的应该能够为我做这件事时,我不想在每次调用时检查边缘情况.

明显的黑客是:

class foo {
public:
  enum color {
    red,
    yellow,
    green
  };
private:
  /* something like */ const unsigned NUM_COLORS = green+1;
  unsigned LEDs_in_stock[NUM_COLORS];
public:
  void command(color c);
};
Run Code Online (Sandbox Code Playgroud)

这当然是一个滴答作响的定时炸弹,等待一些可怜的过度工作的维护程序员添加蓝色LED的配置,并忘记更新NUM_COLORS行.

让我澄清一下.在这种特殊情况下,我想要的是能够说:

class foo {
public:
  enum color {
    red,
    yellow,
    green
  };
  void command(color c);
private:
  something somebody[color];
};
Run Code Online (Sandbox Code Playgroud)

据我所知,C++不允许这样做.

c++ arrays enums visibility

6
推荐指数
1
解决办法
2594
查看次数

这有用吗?C++多重继承和构造函数链接

考虑一个继承自Foo和Baz的Waldo类,即:

class Waldo : public Foo, public Baz {
  ...
};
Run Code Online (Sandbox Code Playgroud)

当我创建一个新的Waldo实例时:

   Waldo *w = new Waldo;
Run Code Online (Sandbox Code Playgroud)

Foo和Baz构造函数会被调用吗?如果默认情况下没有调用它们,那么在类声明或Waldo构造函数的声明/定义中是否有一种简单的方法可以强制它们被调用?

(看起来我可能正在尝试进行构造函数链接,据说C++不这样做.我不确定.)

我正在尝试做的是"注释"各种类声明,其中注释导致(除此之外)注释类的实例被链接到由注释类维护的列表中.例如,这让我可以使用Baz特性遍历所有对象的列表,对它们应用某个操作,而不必担心我是否记得将实例添加到具有Baz特性的对象列表中,因为构造函数自动完成它.

c++ constructor multiple-inheritance

5
推荐指数
2
解决办法
499
查看次数

一些设计模式代码中的奇怪语法:解释?

好的,今天我遇到了这个问题,那时TI TMS470 C++编译器拒绝接受它.

这来自"Head First Design Patterns"示例代码的C++版本的Silver版本.

class foo {
   ...
protected:
   virtual ~foo() = 0 {};  // compiler barfs on this line
};
Run Code Online (Sandbox Code Playgroud)

编译器拒绝接受"= 0"(纯虚拟)和"{}"的组合(我猜这是为了让派生类无论如何都要抛出析构函数.

究竟他们试图用这条线做什么,它真的是合法的C++,它有多重要?

c++ abstract observer-pattern

3
推荐指数
1
解决办法
151
查看次数