Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Class myclass






{ int a;

public:

myclass(); // конструктор

~myclass(); // деструктор

void show();

};

myclass:: myclass() // определение конструктора

{ cout < < " В конструкторе \n";

a = 10; }

myclass:: ~myclass() // определение деструктора

{ cout < < " Удаление...\n"; }

void myclass:: show()

{ cout < < a; } // определение функции вывода a

void main()

{ myclass ob;

ob.show();

}

 

В этом примере значение a инициализируется конструктором myclass(). Конструктор вызывается тогда, когда создается объект ob. Деструктор же вызывается при удалении объекта.

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

Конструктору можно передать аргументы. Для этого надо добавить необходимые параметры в объявление и определение конструктора. Затем, при объявле­нии объекта, задать параметры в качестве аргументов. Показанная ниже программа демонстрирует передачу параметров в конструктор:

#include < iostream.h>

#include < string.h>

#include < stdlib.h>

#include < conio.h>

Class strtype

{ char *p;

int len;

public:

strtype(char *ptr); //конструктор с параметром

~strtype(); //деструктор

void show();

};

strtype:: strtype(char *ptr)

{ len = strlen(ptr);

p = new char[len + 1];

if(! p) { cout < < " Ошибка выделения памяти";

exit(1); }

strcpy(p, ptr);

}

strtype:: ~strtype()

{ cout < < " Освобождение p \n";

delete [] p; }

void strtype:: show()

{ cout < < p < < " -длина: " < < len;

cout < < " \n"; }

void main()

{ strtype s1(" Это проверка"), s2(" Мне нравится С++");

clrscr();

s1.show();

s2.show();

getch();

}

Фактически синтаксис передачи аргумента конструктору с параметром является сокращенной формой записи следующего более длинного выражения:

myclass ob = myclass(4, 5); (вместо myclass ob(4, 5))

Перегрузка кон­структоров иллюстрируется следующим примером.

#include < iostream.h>

#include < conio.h>

Class myclass

{ int x, y;

public: // перегрузка конструктора двумя способами

myclass() { x = 0; y = 0; } // нет инициализации

myclass(int n, int m) { x = n, y = m; } // инициализация

void show() { cout < < x < < ' ' < < y < < '\n'; } };

void main()

{ myclass o1[5]; // объявление массива без инициализации

myclass o2[5] =

{ myclass(1, 2),

myclass(3, 4),

myclass(5, 6), // объявление с инициализацией

myclass(7, 8),

myclass(9, 10), };

int i;

clrscr();

for(i = 0; i< 5; i++) { o1[i].show(); cout < < '\t'; o2[i].show(); }

getch();

}

Одной из форм перегружаемого конструктора является конструктор копиро-вания. Он используется при передаче объектов в функции, когда передается побитовая копия объекта в качестве параметра функции.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал