Как я могу создать два динамических объекта с перегруженным конструктором? - PullRequest
1 голос
/ 16 ноября 2011

Пожалуйста, посмотрите код ниже, это простая тема, но я не знаю.

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 ]

3 голосов
/ 16 ноября 2011

Это невозможно со встроенным массивом

Однако рассмотрите возможность использования std :: vector

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

Это дает вам дополнительное преимущество, которое вы не 'Не нужно беспокоиться об управлении памятью

Добавление некрасивого решения, потому что OP явно этого хочет.Установите FOO на соответствующее значение перед созданием массива. Пожалуйста, прочитайте комментарии, прежде чем понизить голосование

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;
}
2 голосов
/ 16 ноября 2011

Массивы проблематичны в C ++ 98/03, потому что вы не можете вообще инициализировать их совершенно свободноC ++ 11 исправляет это путем равномерной инициализации.Теперь вы можете сказать,

new trial[2] { 1, 1 };
0 голосов
/ 16 ноября 2011

Нет синтаксического способа сделать это в C ++, как в этом (неправильном) примере: trial * trialPtr2 = new trial2;Вы должны сделать цикл for, если хотите использовать массив:

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