0

C++ プログラムの最適なアプローチを見つけようとしています。

Characteristic というオブジェクトを作成する必要があります。この男には 4 つ
の属性があります。 - 文字列名 (名前のみ)
- ? タイプ (特性のタイプ。数値または記述のいずれか)
- ? 範囲 (数値 - 説明的な最小値と最大値
- オプション)
- ? 値 (実際に選択される値は、型に応じて int または string になります)

Java を使用している場合、Numeric と Descriptive という 2 つの子を持つオブジェクト Type を作成します。それぞれが適切な範囲を持ち、適切な形式で値を格納します。

両方の例:
名前: 暖かさ
タイプ: 数値
範囲: 最小 1 最大 5
値: 2

名前: スタイル
タイプ: 説明的
範囲: ミニマル写真
値: ミニマル

C ++でこれを行う最良の方法は何なのかわかりません。
テンプレートを見るべきですか?もしそうなら、私はそれらを使用する方法を理解できないからです。

4

2 に答える 2

1

必要に応じて、Java と同じことを行うことができます。

struct Type {
    std::string Name;
};

struct Numeric : Type {
    int value, min, max;
};

struct Descriptive : Type {
    std::string value, min, max;
};

ただし、Characteristic の実装方法を決定する前に、その使用方法と必要なインターフェイスをより適切に定義する必要があります。たとえば、上記では Type オブジェクトをポリモーフィック オブジェクトとして使用するのは簡単ではありません。Type ポインターが Numeric または Descriptive を指しているかどうかを手動で確認し、それに応じて動作する必要があります。


C++ でポリモーフィズムを取得する 1 つの方法は、仮想メソッドを使用することです。

struct Type {
    ~Type() {} // virtual destructor
    virtual void do_something() = 0; // pure virtual function. Derived classes must provide an implementation
    std::string Name;
};

struct Numeric : Type {
    virtual void do_something() {
        std::cout << "Numeric value: " << value << " (" << min << ',' << max << ")\n"; 
    }
    int value, min, max;
};

struct Descriptive : Type {
    virtual void do_something() {
        std::cout << "Descriptive value: " << value << " (" << min << ',' << max << ")\n"; 
    }
    std::string value, min, max;
};

これで、 a を呼び出すと、動的タイプの正しいメソッドが特定さdo_somethingれ、それが呼び出されます。Type *

于 2012-04-18T20:11:01.503 に答える
0

C++ では、いくつかのアプローチから選択できます。

  • 継承。これができるのは Java だけではありません。これが Java で使用するアプローチである場合、C++ で同じことができない理由がわかりません。
  • テンプレート。このアプローチは、Java ジェネリックに対応します。
  • 組合。対応するJavaはないと思いますが、調べる価値があるかもしれません。

詳細がわからなければ、なぜどちらを優先すべきかについて、適切な議論をすることはできません。

于 2012-04-18T20:04:02.520 に答える