
- •Конструкторы и деструкторы
- •Формат компонентной функции-деструктора
- •Void main () {
- •Void main()
- •Void main()
- •Конструктор с аргументами, задаваемыми по умолчанию
- •Void main ()
- •Void shownumber ( void)
- •Конструктор по умолчанию
- •Конструктор копирования
- •Int GetX ( ) { return X; }
- •Int GetX ( ) { return X; }
- •Int GetY ( ) { return y; }
- •Void Print ( t obj )
- •Void main () {
- •Void main ( )
- •Void main ( )
- •Void vivod ( ) // выводит данные
- •Void main ( )
- •Имя класса ::имя компонента
- •Void main ( )
- •Тип данных(имя класса ::*имя указателя)
- •Имяобъекта.* указатель на компонент данных;
- •Имя объекта.*указатель на метод(параметры);
- •Компонентные функции
- •Initgraph( тип графического драйвера, режим адаптера , путь к драйверу)
- •Void far initgraph (int far * graphdriver, int far * graphmode, char far * pathtodriver);
- •Void point :: show (void)
- •Void point :: hide(void)
- •Void main ( )
- •Указатель this
- •Void print ( void) void print ( void)
- •Void main ()
- •Void que::add(void)
- •Void que::print (void)
- •Void main( )
Конструктор с аргументами, задаваемыми по умолчанию
Этот конструктор позволяет при его вызове с параметрами инициализировать данные создаваемого объекта указанными значениями параметров.
Но возможен вызов конструктора (или создание объекта) и без параметров, при этом данные инициализируются значениями по умолчанию.
Для класса 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, и естественно будет сообщение об ошибке, т.к. это не строка).
Напр., если четыре параметра с умалчиваемыми значениями, можно вызывать конструктор:
без параметров;
с указанием только первого параметра ( три параметра – значения по умолчанию);
с указанием двух первых параметров ( два последних – по умолчанию)
с указанием трех первых ( последний – по умолчанию)
с указанием четырех параметров
Еще пример:
… 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.
Если в конструкторе не было инициализации, то этот конструктор предоставляет возможность создавать неинициализированные объекты даже при наличии в определении класса еще одного конструктора с параметрами.
Конструктор по умолчанию схож при вызове с конструктором с умалчиваемыми значениями и при написании конструкции:
<Имя класса> < имя объекта> ;
компилятор обнаруживает двусмысленность и выдает сообщение об ошибке, т. к. не ясно какой конструктор вызывать.
При наличии в классе конструктора с параметрами, задаваемыми по умолчанию, объявлять конструктор по умолчанию нельзя!
Если в определении класса вообще нет конструктора, компилятор автоматически предоставляет конструктор по умолчанию следующего вида:
<Имя класса> ( ) { }
который и создает неинициализированные объекты.