Конструктор, вызываемый без параметров, называется конструктором по умолчанию. Параметры, задаваемые по умолчанию, может содержать только один из конструкторов.
Пример класса, содержащего несколько конструкторов:
enum color {red, green, blue} // возможные значения цвета
class monstr
{
int health, ammo;
color skin;
char *name;
public:
monstr(in the=100, int am=10);
monstr(color sk);
monstr(char *nam);
int get_health()
{
return health;
}
int get_ammo()
{
return ammo;
}
…
};
// -------------------------------------
monstr::monstr(int he, int am)
{
health=he; ammo=am; skin=red; name=0;
}
// -------------------------------------
monstr::monstr(color sk)
{
switch(sk)
{
case red: health=100; ammo=10; skin=red; name=0; break;
case green: health=100; ammo=20; skin=green; name=0; break;
case blue: health=100; ammo=40; skin=blue; name=0; break;
}
}
// ------------------------------------
monstr::monstr(char *nam)
{
name=new char[strlen(nam)+1]; // длина строки +1 для хранения нуль-символа
strcpy(name, nam);
health=100; ammo=10; skin=red;
}
…
// ------------------------------------
monstr *m=new monstr("Ork");
monstr Green(green);
…
Первый конструктор в данном примере является конструктором по умолчанию, так как его можно вызвать без параметров.
При инициализации объектов класса monstr требуемый конструктор будет вызван в зависимости от списка значений в скобках (компилятор распознает нужный вариант).
Конструктор преобразования – это конструктор класса, принимающий один параметр какого-либо другого типа, то есть осуществляющий преобразование из типа параметра в тип этого класса.