Goods tip5 ( “Пальто” , 20000); //обычно

good tip6 = good (“Шуба”, 100000);

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

}

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

Этот конструктор позволяет при его вызове с параметрами инициализировать данные создаваемого объекта указанными значениями параметров.

Но возможен вызов конструктора (или создание объекта) и без параметров, при этом данные инициализируются значениями по умолчанию.

Для класса Men конструктор с умалчиваемыми значениями параметров:

Men (char*n = “ ”, int a =0)

// значения по умолчанию имя – пробел, возраст -0

{name=n; age = a; }

/* Такой конструктор можно вызвать без параметров. Если такой конструктор вызвать без параметров, то создаваемый объект будет инициироваться значениями по умолчанию.

Вызов того же конструктора с параметрами будет инициировать данные создаваемого объекта значениями параметров */

Void main ()

{ Men m1; // name = “ “, age =0

Men m2 (“ Иванов”, 45) // name =”Иванов”, age = 45

Men m3 (“Петров”) // name= “Петров” age=0

Men m4 (18) // ошибка!

Нельзя задавать параметр, перескакивая через умалчиваемое значение (это значение компилятором будет трактоваться как значение параметра n, и естественно будет сообщение об ошибке, т.к. это не строка).

Напр., если четыре параметра с умалчиваемыми значениями, можно вызывать конструктор:

1) без параметров;

2) с указанием только первого параметра (три параметра – значения по умолчанию);

3) с указанием двух первых параметров (два последних – по умолчанию)

4) с указанием трех первых (последний – по умолчанию)

5) с указанием четырех параметров

Еще пример:

… struct mag

{ int a,b, c;

mag (int aa=1, int bb=2, int cc=3) // конструктор

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

{ a= aa; b=bb; c= cc; };

Void shownumber (void)

{cout << a <<b <<c; };

};

mag one; // объектинициализируется значениями 1, 2,3

mag one1 (10); // объектинициализируется значениями 10, 2,3

mag one2 (10,20); // объектинициализируется значениями 10, 20,3

mag one3 (10,20,30) // объектинициализируется значениями 10, 20,30

Не обязательно иметь умалчиваемое значение для всех параметров, при этом параметры, не подлежащие инициализации умалчиваемыми значениями должны располагаться в начале списка, подлежащие – в конце этого списка.

Men (char*n, int a=0) { name = n; age = a; }

Men (char*n = “ “, int a) { name = n; age = a; } // ошибка!

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

Это разновидность конструктора без параметров (присутствует в классе в единственном экземпляре).

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

Этот конструктор не имеет параметров.

class A {

int x, y;

public:

A ();

...

};

A:: A () // невстроенный конструктор по умолчанию

{ x =0; y = 0; // инициализация данных, может отсутствовать

... // другие инициализирующие действия

}

/* мог бы быть просто такой:

A:: A () { } */

При наличии конструктора по умолчанию, предложение

A one;

создает объект со значениями данных x=0 и y=0.

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

Конструктор по умолчанию схож при вызове с конструктором с умалчиваемыми значениями и при написании конструкции:

< Имя класса> < имя объекта>;

компилятор обнаруживает двусмысленность и выдает сообщение об ошибке, т. к. не ясно какой конструктор вызывать.

При наличии в классе конструктора с параметрами, задаваемыми по умолчанию, объявлять конструктор по умолчанию нельзя!

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

< Имя класса> () { }

который и создает неинициализированные объекты.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: