我不确定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;
}
这部分有什么问题吗?
答案 0 :(得分:5)
正如塞思所说,这是合法的。
为了让它更好地工作,你可以改变的是使GetSpecialImage
成为静态函数。类中定义的静态函数是类函数而不是对象函数。这意味着你不需要一个对象来调用它。
然后会这样调用:Image special = Image::GetSpecialImage();
答案 1 :(得分:1)
是的,你可以这样做。我会这样做但是
Image GetSpecialImage()
{
return Image(10,10);
}
答案 2 :(得分:0)
虽然这段代码没有任何问题(好吧,除了返回本地,这是一个禁忌),我猜你正在寻找的是静态构造函数模式。像这样:
class Image{
public:
static Image* GetSpecialImage(){
return new Image(10,10);
}
};
//and call it so
Image *i = Image::GetSpecialImage();