如何使用重载构造函数创建两个动态对象?

时间:2011-11-16 01:05:58

标签: c++ constructor overloading dynamic-arrays

请查看下面的代码,这是一个简单的主题,但我不知道。

class trial{
public:
    trial(){
        y = -1;
    }
    trial(int x){
        y = x;
    }
public:
        int y;
};


int main() {
    trial *trialPtr = new trial();     // creates a dynamic object with empty constructor
    trial *trialPtr1 = new trial(1);   // creates a dynamic object with overloaded constructor
    trial *trialPtr2 = new trial[2];   // creates two dynamic objects with empty constructor
    return 0;
}

我的问题是,如何使用重载构造函数创建两个动态对象?

3 个答案:

答案 0 :(得分:3)

This is not possible with an built in array

但是考虑使用std :: vector

vector<trial> var(10, trail(4));

这有一个额外的好处,你不需要担心内存管理

添加一个难看的解决方案,因为OP显然想要它。在创建阵列之前,将 FOO 设置为适当的值。 请在downvoting之前阅读评论

int FOO = -1;

class trial{
public:
    trial(){
        y = FOO;
    }
    trial(int x){
        y = x;
    }
public:
        int y;
};

int main(int argc, _TCHAR* argv[])
{
    FOO = 4;
    trial *trialPtr2 = new trial[2];
    return 0;
}

答案 1 :(得分:2)

在C ++ 98/03中,数组是有问题的,因为你通常不能完全自由地初始化它们。 C ++ 11通过统一初始化来解决这个问题。现在你可以说,

new trial[2] { 1, 1 };

答案 2 :(得分:0)

在C ++中没有语法方法可以做到这一点,就像在这个(不正确的)示例中一样: 试用* trialPtr2 =新试验2; 如果要使用数组,则必须执行“for”循环:

trial *trialPtr2[] = new (*trial)[2];
for (int i = 0; i < 2; i++)
{
    trialPtr2[i] = new trial(3);
}