Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

operator new[] и конструктор с параметрами

354
06 июня 2008 года
ШпиЁн
468 / / 19.02.2006
Доброго всем дня.
есть класс:
Код:
class someClass
{
public:
    someClass()
    {
        cout << "someClass()" << endl;
    }
   
    someClass(int i)
    {
        cout << "someClass(" << i << ")" << endl;
    }
    ~someClass(){}
};

необходимо выделить память - вектор:
 
Код:
someClass * psC = new someClass[10];

но при этом вызовется конструктор someClass() без параметров.
Как в таком случае вызывать someClass(int i) - конструктор с параметрами?
255
06 июня 2008 года
Dart Bobr
1.4K / / 09.04.2004
тебе нужно для всех передать один и тот же параметр, или в каждом конкретном случае разный?
первое что приходит в голову:
 
Код:
#define someClass* mytype
mytype * psC = new mytype[10];
for (int i = 0; i < 10; ++i)
{
  psC = new someClass(i);
}


Может в твоем конкретном случае можна сделать по-другому, но по-моему непосредственно все сразу проинициализировать при создании невозможно.
354
06 июня 2008 года
ШпиЁн
468 / / 19.02.2006
нужно создать массив объектов, а не массив указателей на эти объекты.
передать в конструктор всем один и тот же параметр.
11
06 июня 2008 года
oxotnik333
2.9K / / 03.08.2007
 
Код:
someClass psC = new someClass(1)[10];
3
06 июня 2008 года
Green
4.8K / / 20.01.2000
Цитата: oxotnik333
 
Код:
someClass psC = new someClass(1)[10];


Извиняем, что фигню написал. :)

Цитата: ШпиЁн
нужно создать массив объектов, а не массив указателей на эти объекты.
передать в конструктор всем один и тот же параметр.


Используй std::vector

 
Код:
vector<someClass> array(N, Param);
354
06 июня 2008 года
ШпиЁн
468 / / 19.02.2006
Код:
#include <windows.h>
#include <iostream>
#include <vector>

using namespace std;

class someClass
{
public:
    someClass()
    {
        cout << "someClass()" << endl;
    }
   
    someClass(int i)
    {
        cout << "someClass(" << i << ")" << endl;
    }
    ~someClass(){}
};

int main()
{
    vector<someClass> array(10, 1234);
    getchar();
   
    return 0;
}

на экране появилось только
someClass(1234)
и все. не работает?!
если делать так:
 
Код:
someClass * psC = new someClass[10];

появилось:
someClass()
someClass()
someClass()
someClass()
someClass()
someClass()
someClass()
someClass()
someClass()
someClass()
Из чего можно сделать вывод сколько раз и что вызвалось... :(
это вообще осуществимо?
3
06 июня 2008 года
Green
4.8K / / 20.01.2000
Цитата: ШпиЁн

Из чего можно сделать вывод сколько раз и что вызвалось... :(
это вообще осуществимо?


И какой, интересно, вывод можно сделать?
Рекомендую получше изучить класс vector.
Делай выводы из этого:

Код:
#include <windows.h>
#include <iostream>
#include <vector>
using namespace std;

class someClass
{
public:
    someClass()
    {
        cout << "someClass()" << endl;
    }

    someClass(int i)
    {
        cout << "someClass(" << i << ")" << endl;
    }

    someClass(const someClass&)
    {
        cout << "someClass(const someClass&)" << endl;
    }

    ~someClass(){}
};

int main()
{
    vector<someClass> array(10, 1234);

    return 0;
}
354
06 июня 2008 года
ШпиЁн
468 / / 19.02.2006
изучил :D
создается один объект и вызывается конструктор копирования для всех.
получилось :D
спасибо
32K
06 июня 2008 года
Rififi
54 / / 04.06.2008
Цитата:
необходимо выделить память - вектор:
Код:

someClass * psC = new someClass[10];



 
Код:
namespace lm = boost::lambda;
someClass* psC[10];
int arg = 1234;
std::generate_n(psC, 10,
    lm::bind(lm::new_ptr<someClass>(), lm::var(arg))
    );
354
06 июня 2008 года
ШпиЁн
468 / / 19.02.2006
omg :D
спасибо конечно :)
с самого начала мне хотелось осуществить это просто на C++ средствами самого языка(не столь хорошо знаю его еще, потому что - студент)
предложили STL. теперь - boost.
неужели попроще нельзя, ничего не прицепляя?
3
06 июня 2008 года
Green
4.8K / / 20.01.2000
Цитата: Rififi
 
Код:
namespace lm = boost::lambda;
someClass* psC[10];
int arg = 1234;
std::generate_n(psC, 10,
    lm::bind(lm::new_ptr<someClass>(), lm::var(arg))
    );


То же самое предложил Dart Bobr, но только значительно проще.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог