Перевести Ада запись с условной на С ++ - PullRequest
3 голосов
/ 26 марта 2012

У меня есть задание, в котором мне нужно перевести некоторый код Ada в код C ++, чтобы он был максимально похож на код 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 ]

5 голосов
/ 26 марта 2012

Похоже, вы предполагаете получить классы Circle, Triangle и Rectangle из базового класса Shape.Существуют общие свойства (Filled, Color), которые необходимо указать в вашей базовой Shape, а производные классы будут иметь диаметр или левые или правые стороны или другие дополнительные свойства.

Альтернативой может быть тип-id поле (enum {Circle, Rectangle, ..}) в Shape struct и объединяющее поле, содержащее различные подструктуры для диаметра и других зависимых от типа элементов.Это будет больше похоже на пример (и C), но менее похоже на C ++.

1 голос
/ 27 марта 2012

Для ответа, не основанного на классе:

  1. Сделайте перечисления для типов Shape и Color.
  2. Сделать struct с для данных Круг, Треугольник и Прямоугольник.
  3. Создайте рисунок struct, содержащий заполненное поле, цветное поле и поле, которое является union из struct s, сделанных в # 2.
  4. [необязательно] Создайте «конструкторы» для различных фигур, которые возвращают struct из # 3, правильно инициализированные.
...