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 回答