Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_Obektno-orientirovannoe_programmirovan...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
351.74 Кб
Скачать

Имя_класса (список формальных параметров)

{ операторы тела конструктора };

Такой конструктор называется конструктором, получающим параметры. Пример программы, в которой использован такой конструктор, приведен в листинге 3.4.

Листинг 3.4

#include <iostream.h>

#include <math.h>

// Объявление класса “трехмерный вектор”

class V_3d

{

double x;

double y;

double z;

public:

// конструктор получает три параметра – ссылки на

//данные типа double

// определение конструктора находится внутри класса

V_3d( double &X, double &y,double &z)

{ x=X; y=Y; z=Z; };

//объявление функции – метода класса

double mod();

};

Void main(void)

{

// Создание объекта R класса V_3d с инициализацией элементов-

// данных значениями переданных конструктору параметров

V_3d R(1.0,2.0,3.0);// неявный вызов конструктора

double a;

a=R.mod();

cout << "\n длина вектора =" << a;

}

//определение функции – метода класса

double V_3d :: mod()

{

return sqrt(x*x+y*y+z*z);

}

Конструкторы могут иметь аргументы по умолчанию. Например, конструктор

V_3d :: V_3d(double, double, double =7.6)

может принимать два или три аргумента. Если данный конструктор при инициализации объекта будет представлен с двумя аргументами, недостающий третий аргумент будет принят как значение типа double, равное 7.6. Аналогично конструктор

V_3d :: V_3d(double=5.5, double=6.3, double =7.6)

может принимать один, два или три аргумента, либо не принимать аргументов вообще, причем в каждом случае принимаются соответствующие умолчания.

Конструктор по умолчанию. Конструктором по умолчанию для класса Х называется такой конструктор, который не принимает никаких аргументов: X::X(). Например:

V_3d () { x=0; y=0; z=0; };

Примечание

. Конструктор по умолчанию не принимает аргументов вообще, его не следует путать с конструктором, имеющим аргументы по умолчанию.

Конструктор копирования. Конструктор копирования для класса . Х - это такой конструктор, который может быть вызван с единственным аргументом типа Х:

Х:: х(const х&)

Конструктор копирования запускается при копировании объекта данного класса, обычно в случае объявления с инициализацией объектом другого класса: Х x = y.

Если конструкторы в теле класса не были определены явно, то компилятор формирует по умолчанию конструктор без параметров и конструктор копирования.

3.8. Перегрузка конструкторов

В определении класса может присутствовать несколько конструкторов, т.е. конструкторы могут быть перегружены. Перегруженные конструкторы позволяют создавать объекты в зависимости от значений, используемых при инициализации.

Перегрузка конструкторов иллюстрирует такой принцип ООП, как полиморфизм, что означает наличие в пределах одного класса нескольких функций с одним и тем же именем.

В листинге 3.5 приведен пример программы, в которой используются перегруженные конструкторы.

Листинг 3.5. Перегрузка конструкторов

#include <iostream.h>

#include <math.h>

class V_3d

{

double x,y,z;

public:

//конструктор по умолчанию

V_3d() {x=0;y=0;z=0;};

//конструктор, принимающий параметры

V_3d(double x1,double y1,double z1)

{

x=x1;

y=y1;

z=z1;

};

//конструктор копирования

V_3d(const V_3d& V1);

// функция вычисления модуля

double mod()

{

return sqrt(x*x+y+y+z*z);

};

// функция для вывода элементов – данных класса

void print();

};

void main(void)

{

double a;

//создание объекта B класса V_3d

V_3d B; //запуск конструктора по умолчанию

cout << "координаты вектора B:\n";

B.print(); // вызов функции – метода класса

//создание обьекта R класса V_3d

V_3d R(1.0,2.0,3.0) ; //используется конструктор с параметрами

cout << "координаты вектора R:\n";

R.print();

a=R.mod(); //вызов метода класса

cout << "\n длина вектора R = " << a <<"\n";

V_3d C=R; // запуск конструктора копирования для объекта C

cout << "\nкоординаты вектора C:\n";

C.print();

}

//определение конструктора копирования

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]