Конструкторы с параметрами и перегрузка конструкторов
Конструкторы могут иметь параметры. Для этого просто нужно добавит необходимые параметры в объявление и определение конструктора. Затем, при создании объекта, задайте параметры в качестве аргументов.
class _3d
{
double x, y, z;
public:
_3d ();
_3d (double initX, double initY, double initZ);
...
};
_3d::_3d(double initX, double initY, double initZ)
//конструктор класса _3d с параметрами
{
x = initX;
y = initY;
z = initZ;
cout << 'Работа конструктора _3d \n';
}
main()
{
_3d A; //создается объект A и происходит инициализация его элементов
// A.x = A.y = A.z = 0;
A.set (3,4,0); //Теперь A.x = 3.0, A.y = 4.0, A.z = 0.0
_3d B (3,4,0); //создается объект B и происходит инициализация его элементов
// B.x = 3.0, B.y = 4.0, B.z = 0.0
}
Такой способ вызова конструктора является сокращенной формой записи выражения
_3d B = _3d (3,4,0);
В отличие от конструктора, деструктор не может иметь параметров. Оно и понятно, поскольку отсутствует механизм передачи параметров удаляемому объекту.
В этом примере сознательно вместе с новым объектом B оставлен объект A, чтобы продемонстрировать различные способы создания объектов. Каждому способу объявления объекта класса должна соответствовать своя версия конструкторов класса. Если это не будет обеспечено, то при компиляции программы обнаружится ошибка.
На этом примере легко понять, чем может быть вызвана необходимость перегрузки конструкторов. Именно перегрузки, поскольку речь здесь идет о функциях, имеющих одинаковые имена, но различные списки параметров. Главный смысл перегрузки конструкторов состоит в том, чтобы предоставить программисту наиболее подходящий метод инициализации объекта.
В нашем примере представлен наиболее распространенный вариант перегрузки конструкторов, т.е. конструктор без параметров и конструктор с параметрами. Как правило, в программе бывают необходимы оба эти вида, поскольку конструктор с параметрами более удобен при работе с одиночными объектами, но не может использоваться при инициализации объектов-элементов динамического массива (для статического массива может).
Хотя конструктор можно перегружать столько раз, сколько захотите, лучше не стоит этим злоупотреблять. Конструктор стоит перегружать лишь для наиболее часто встречающихся ситуаций.