1

ここにいくつかのクラスがあります:

class weapons
{
protected:
    int damage, armor, cost;
};

class sword : public weapons
{
public:
    // Initialization for the sword class.
    void initialize()
    {

    }
};

class shield : public weapons
{

};

私はこれらに取り組み始めましたが、継承された各クラスのダメージ、鎧、コストを設定する方法を覚えていません。どうすればよいですか?簡単な方法は何ですか(簡単である必要はありません)?

4

3 に答える 3

6

クラスに変数を設定する適切な方法は、クラスのコンストラクターを使用することです。派生クラスは、初期化子リストを使用して、基本クラスに変数を設定する必要があります。

class weapon {
protected:
    int damage, armor, cost;
    weapon(int d, int a, int c) : damage(d), armor(a), cost(c) {}
};

class sword : public weapon {
private:
    int weight;
public:
    sword(int d, int a, int c, int w) : weapon(d, a, c), weight(w) {}
};

または、サブクラスがベースの値を制御する場合(つまり、ユーザーが、、を渡さないdamage場合、armorまたは次のcostように実行できます。

sword(int w) : weapon(30, 5, 120), weight(w) {}

コンパイラーはこのコードを最適化して適切にインライン化するため、コンストラクターのレイヤーを追加することによるパフォーマンスの低下について心配する必要はありません。

于 2012-07-08T16:13:07.340 に答える
1

子クラスで使用するだけです。プロパティは親で保護されていると定義されているため、子の通常の変数と同じようにアクセスできます。このような:

damage = 60;
armor = 0;
cost = 42;
于 2012-07-08T16:10:55.810 に答える
1
class weapons
{
protected:
    int damage, armor, cost;
    weapons(int d, int a, int c): 
      damage(d), armor(a), cost(c) { }
};

class sword: public weapons {
  public:
    sword(): weapons(10, 12, 31) { }
}
class shield: public weapons {
  public:
    shield(): weapons(1, 22, 48) { }
}
于 2012-07-08T16:15:47.370 に答える