class someClass
{
public:
someClass()
{
cout << "someClass()" << endl;
}
someClass(int i)
{
cout << "someClass(" << i << ")" << endl;
}
~someClass(){}
};
operator new[] и конструктор с параметрами
есть класс:
Код:
необходимо выделить память - вектор:
Код:
someClass * psC = new someClass[10];
но при этом вызовется конструктор someClass() без параметров.
Как в таком случае вызывать someClass(int i) - конструктор с параметрами?
первое что приходит в голову:
Код:
#define someClass* mytype
mytype * psC = new mytype[10];
for (int i = 0; i < 10; ++i)
{
psC = new someClass(i);
}
mytype * psC = new mytype[10];
for (int i = 0; i < 10; ++i)
{
psC = new someClass(i);
}
Может в твоем конкретном случае можна сделать по-другому, но по-моему непосредственно все сразу проинициализировать при создании невозможно.
передать в конструктор всем один и тот же параметр.
Код:
someClass psC = new someClass(1)[10];
Цитата: oxotnik333
Код:
someClass psC = new someClass(1)[10];
Извиняем, что фигню написал. :)
Цитата: ШпиЁн
нужно создать массив объектов, а не массив указателей на эти объекты.
передать в конструктор всем один и тот же параметр.
передать в конструктор всем один и тот же параметр.
Используй std::vector
Код:
vector<someClass> array(N, Param);
Код:
#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;
}
#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()
Из чего можно сделать вывод сколько раз и что вызвалось... :(
это вообще осуществимо?
Цитата: ШпиЁн
Из чего можно сделать вывод сколько раз и что вызвалось... :(
это вообще осуществимо?
И какой, интересно, вывод можно сделать?
Рекомендую получше изучить класс 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;
}
#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;
}
создается один объект и вызывается конструктор копирования для всех.
получилось :D
спасибо
Цитата:
необходимо выделить память - вектор:
Код:
someClass * psC = new someClass[10];
Код:
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))
);
someClass* psC[10];
int arg = 1234;
std::generate_n(psC, 10,
lm::bind(lm::new_ptr<someClass>(), lm::var(arg))
);
спасибо конечно :)
с самого начала мне хотелось осуществить это просто на C++ средствами самого языка(не столь хорошо знаю его еще, потому что - студент)
предложили STL. теперь - boost.
неужели попроще нельзя, ничего не прицепляя?
Цитата: 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))
);
someClass* psC[10];
int arg = 1234;
std::generate_n(psC, 10,
lm::bind(lm::new_ptr<someClass>(), lm::var(arg))
);
То же самое предложил Dart Bobr, но только значительно проще.