2012-03-26 4 views
3

私はAdaコードをC++コードに変換する必要があり、できるだけAdaコードと似ています。条件付きのAdaレコードをC++に変換

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; 
    }; 
}; 

いつものように私はそれをよく考えました。すべてのあなたの入力をありがとう!

+1

ようこそStackOverflow!あなたは "**クラス**を使用することができます**構造**を探しています"と言います。 FYI、 'class'と' struct'はC++でほぼ同義です。http://stackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-cを参照してください。 –

+0

@Robᵩありがとう。パーミッションの違いを理解していますが、** struct **、** enum **、** union **型を暗黙的にしか使用できないという事実によって問題は複雑になります。説明をありがとうございます。 – hurricaneMitch

+0

@ Rob Asによると 'class'と' struct'はC++ではほぼ同義ですが、スタイルの問題として、 'struct'キーワードは主に[POD](http://en.wikipedia.org/ wiki/Plain_old_data_structure)タイプ。あなたが言っていることは、あなたが継承を使用するはずがないということです。 –

答えて

5

円、三角形、および矩形を基本シェイプクラスから派生させているようです。ベースシェイプに移動する必要がある共通のプロパティ(塗りつぶし、色)があり、派生クラスには直径や左右またはその他のプロパティがあります。

代わりに、形状構造体の型IDフィールド(enum {Circle, Rectangle, ..})と、直径およびその他のタイプ依存メンバーの異なるサブ構造を保持する共用体フィールドがあります。これは例(とC)に似ていますが、C++には似ていません。非クラスベースの答えを

+2

私は派生したクラスも期待されているものだと思います。しかし、これは変種レコードなしでもアダの中で実行されている可能性があります。 – oenone

+0

@perrealありがとう!私は、必要なコードがクラスを使用していないと確信しています。そういうわけで、それは完全な泥だらけです。さまざまなサブ構造を持つShape **構造**のアイデアは、私が探しているもののように聞こえます。私はちょうどそれの周りに私の頭を包んだ。もう一度お世話になりました。 – hurricaneMitch

+1

この[比較](http://en.wikipedia.org/wiki/Tagged_union#1970s_.26_1980s)も参照してください。 – trashgod

1

  1. は、図形と色の種類の列挙を行います。
  2. 円、三角、および長方形のデータにstructを設定します。
  3. structには、塗りつぶしフィールド、色付きフィールド、およびunionstructが#2で作成されています。
  4. [オプション]適切に初期化された#3からstructを返すさまざまな図形の「コンストラクタ」を作成します。
+0

これは私が最終的に思いついたものだった。インストラクターがどんな狂気を「正しい」コードとして思いついたかを正確に報告します。明確な説明をありがとう! – hurricaneMitch

+0

@hurricaneMitchお願いします、私はそれがどのくらい近いのだろうと思います。 – Shark8