2017-07-24 125 views
0

我正在玩C++中的不可变结构。假设我想将mathematics移动到zippy类中 - 这可能吗?它构造了一个zippy,但该函数不能成为构造函数。是否必须在课外生活?将构造一个对象,但不是构造函数的方法

struct zippy 
{ 
    const int a; 
    const int b; 
    zippy(int z, int q) : a(z), b(q) {}; 
}; 

zippy mathematics(int b) 
{ 
    int r = b + 5; 
    //imagine a bunch of complicated math here 
    return zippy(b, r); 
} 

int main() 
{ 
    zippy r = mathematics(3); 
    return 0; 
} 
+3

也许使它成为'static'成员函数? –

+0

一些挑剔:你不想构建一个类,但你想构造一个类的对象/实例 – user463035818

+0

它可以“活在它的内部”,但它不能依赖调用时'zippy'的有效实例。 – StoryTeller

回答

5

你通常在这种情况下,做的是公开,返回一个新的对象一个公共静态方法:

struct zippy 
{ 
    static zippy mathematics(int b); 
    const int a; 
    const int b; 
    zippy(int z, int q) : a(z), b(q) {}; 
}; 

zippy zippy::mathematics(int b) 
{ 
    int r = b + 5; 
    //imagine a bunch of complicated math here 
    return zippy(b, r); 
} 

的命名是关在这里,但你的想法。

这可以在不需要的zippy一个实例调用,并创建一个新的zippy对象:

zippy newZippy = zippy::mathematics(42); 
+0

喜欢它。真棒。谢谢。 – Carbon