将具有条件的Ada记录转换为C ++

时间:2012-03-26 13:42:17

标签: c++ struct ada

我有一项任务,我需要将一些Ada代码翻译成C ++代码,使其尽可能与Ada代码相似。 Ada代码如下

    type Shape is (Circle, Triangle, Rectangle);
    type Colors is (Red, Green, Blue);
    type Figure(Form: Shape := Circle) is
        record
            Filled: Boolean;
            Color: Colors;
            case Form is 
                when Circle =>
                    Diameter: Float;
                when Triangle =>
                    Left_Side: Integer;
                    Right_Side: Integer;
                    Angle: Float;
                when Rectangle =>
                    Side_1: Integer;
                    Side_2: Integer;
            end case;
        end record;

我知道我可以使用class但是根据问题的语言和老师的个性来判断我认为他正在寻找struct。我不清楚如何在struct内创建不同情况所需的逻辑。老师非常特别,所以我认为需要最小的内存占用。

我是CSc学生,如果解决方案很简单,请原谅我。 谢谢!

更新: 所以最后的答案比我想象的要简单。

enum Shape {Circle, Triangle, Rectangle};
enum Colors {Red, Green, Blue};
struct Figure {
  bool Filled;
  Colors Color;
  Shape Form;
  union {
    float Diameter;
    struct {
      int Left_Side;
      int Right_Side;
      float Angle;
    } tri;
    struct {
      int Side_1;
      int Side_2;
    } rect;
  };
 };
像往常一样,我推翻了它。感谢您的所有投入!

2 个答案:

答案 0 :(得分:5)

您似乎希望从基础Shape类派生 Circle,Triangle和Rectangle。有一些常见属性(填充,颜色)需要进入基础Shape,派生类将具有直径或左右侧或其他附加属性。

另一种方法是在Shape struct 中使用type-id字段(enum {Circle, Rectangle, ..}),并为union和其他类型相关成员提供不同的子结构。这看起来更像是示例(和C),但不像C ++。

答案 1 :(得分:1)

对于非基于类的回答:

  1. 制作“形状”和“颜色”类型的枚举。
  2. 为圆形,三角形和矩形数据设置struct
  3. 制作一个图struct,其中包含填充字段,彩色字段以及#2中union的{​​{1}}字段。
  4. [可选]为从#3返回struct的各种形状制作“构造函数”,并正确初始化。