-2

C ++では、引数を取るクラスを使用して、コンストラクターに新しい型としてフィードし、別のクラスで変数を宣言するにはどうすればよいですか(2番目のクラスのコンストラクターが取得した入力を使用して1番目のクラスのコンストラクターにフィードしますか?)

私がやりたいのは次のようなものですが、Objectクラスの部分を正しく行う方法がわからず、エラーが発生し続けます(ColorクラスからObjectクラスを派生させたくありません)

enum color_enum {red, blue, green, black};
class color
{
protected:
   color_enum col;
public:
   color(color_enum initval)
   {
      col = initval;
   }
   string str()
   {
      switch (col)
      {
      case red:
         return "red";
      case blue:
         return "blue";
      case green:
         return "green";
      case black:
         return "black";
      default:
         return "N/A";
   }
  }
};

ostream &operator<< (ostream &out, color &inst)
{
  out << inst.str();
  return out;
}

class Object
{
public:
  float objvolume;
  float objmass;
  string objname;
  color objcolor(initval);
};
4

1 に答える 1

1

初期化子リストを使用します。

class Object {
public:
    Object(color_enum initval) : objcolor(initval){}
                          //   ^^^^^^^^^^^^^^^^^^^ 
                          //initialize objcolor with initval               
    //...
    color objcolor;
};

...

Object o(red); //objcolor will be constructed with red as an argument

C ++ 11では、クラス内の初期化を利用して次のことを行うことができます。

color objcolor{red};

これはデフォルト値に対してのみ機能しますが、コンストラクターに渡される値に対しては機能しません。

于 2013-02-11T21:22:42.950 に答える