我有一项任务,我需要将一些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;
};
};
像往常一样,我推翻了它。感谢您的所有投入!
答案 0 :(得分:5)
您似乎希望从基础Shape类派生类 Circle,Triangle和Rectangle。有一些常见属性(填充,颜色)需要进入基础Shape,派生类将具有直径或左右侧或其他附加属性。
另一种方法是在Shape struct 中使用type-id字段(enum {Circle, Rectangle, ..}
),并为union和其他类型相关成员提供不同的子结构。这看起来更像是示例(和C),但不像C ++。
答案 1 :(得分:1)
对于非基于类的回答:
struct
。struct
,其中包含填充字段,彩色字段以及#2中union
的{{1}}字段。struct
的各种形状制作“构造函数”,并正确初始化。