0

C ++でそれが合法かどうかはわかりません:

class Image
{
     Image(int w, int h) // constructor
     {
            ...
     }

     Image GetSpecialImage()
     {
          Image rVal(10,10);
          return rVal;
     }
}

init()C ++でこれを行うには、別の中間レベルのメソッドを使用する必要がありますか?はいの場合、方法を教えていただけますか?


EDIT:あなたはそれでいいと言っても、それは私がやりたいことを実際にはしません...もう少しコードをあげましょう:

class Image
{
     float* data;
     int w;
     int h;

     Image(int w, int h) // constructor
     {
            this->w = w;
            this->h = h;
            data = (float*) malloc ( w * h * sizeof(float) );
     }

     Image GetSpecialImage()
     {
          Image rVal(this->w,this->h);

          for(i=0;i<this->w * this->h;i++)
          {
                rVal.data[i] = this->data[i] + 1;
          }

          return rVal;
     }
}

int main()
{
      Image temp(100, 100);
      Image result = temp.GetSpecialImage();
      cout<<result.data[0];

      return 0;
}

この部分に何か問題がありますか?

4

3 に答える 3

5

セスが言ったように、それは合法です。

それをさらに良く機能させるために変更できることはGetSpecialImage、静的関数を作成することです。クラスで定義された静的関数は、オブジェクト関数ではなくクラス関数です。つまり、オブジェクトを呼び出すためにオブジェクトは必要ありません。

その場合、次のように呼び出されます。Image special = Image::GetSpecialImage();

于 2012-05-08T19:53:57.217 に答える
1

はい、あなたはこれを行うことができます。私はこれをするだけです

 Image GetSpecialImage()
 {            
     return Image(10,10);      
 } 
于 2012-05-08T19:54:35.590 に答える
0

このコードには何も問題はありませんが(ローカルを返すことを除いて、ノーノーです)、探しているのは静的コンストラクターパターンだと思います。そのようです:

class Image{
 public:
  static Image* GetSpecialImage(){
    return new Image(10,10);
  }
};

//and call it so
Image *i = Image::GetSpecialImage();
于 2012-05-08T19:56:10.917 に答える