Студопедия

КАТЕГОРИИ:

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


Class Dot




Class Dot

{

public :

Dot ( ) { cout <<"Constructor \n"; } // конструктор

~dot ( ) { cout <<"Destructor \n"; } // деструктор

}

void main ( )

{

Dot A ;// створення об'єкта

}

Результат:

Constructor

Destructor

Якщо потрібно проініціалізувати змінні класу, використовується конструктор з параметрами.

Class Dot

{

char name ;// ім'я крапки

double x, y ;// координати крапки

public:

Dot ( char Name, double X, double Y ) { name = Name ; x = X ; y = Y ; }

void Print ( ) ;

}

void Dot :: Print()

{

cout<<”koord point”<<name<<" :";

cout<<"\tx="<<x<<"\ty="<<y<<'\n';

}

void main ( )

{

Dot A ( 'A', 3, 4 ) ; // неявний виклик конструктора

Dot В= Dot ('В', 3, 4 ) ; // явний виклик конструктора

A.Print ( ) ; // виклик функції члена класу

}

Тут значення, передане в конструктор при оголошенні об'єкта A, використовується для ініціалізації закритих членів name, x і y цього об'єкта.

Список ініціалізації елементів

Звичайно дані-члени класу ініціалізуються в тілі конструктора, однак існує й інший спосіб ініціалізації – за допомогою списку ініціалізації елементів. Список ініціалізації елементів відділяється двокрапкою від заголовка визначення конструктора й містить дані - члени й конструктори базових класів, розділені комами. Для кожного елемента в круглих дужках безпосередньо за ним вказується один або кілька параметрів, використовуваних при ініціалізації. Синтаксис списку ініціалізації має вигляд:

Constrname ( parl, par2 ) : mem1 ( parl ), mem2 ( par2 ), … { …}

class Dot

{

char name ;

double x, y ;

public:

Dot ( char Name ) : name ( Name ), x ( 0 ), y ( 0 ) { }/

• • •

} ;

Хоча виконання ініціалізації в тілі конструктора або за допомогою списку ініціалізації – справа смаку програміста, список ініціалізації є єдиним методом ініціалізації для:

1. даних-констант

2. посилань

3. об'єкта - члена класу, конструктор якого вимагає завдання значень одного або декількох параметрів.

C++ визначає два спеціальні види конструкторів: конструктор за замовчуванням і конструктор копіювання.

Конструктори за замовчуванням

Конструктором за замовчуванням є конструктор, використовуваний для побудови об'єкта, коли явні значення для ініціалізації відсутні. Для класу Point це

Point PP;

Тоді конструктор за замовчуванням виглядає так:

Point(){}

Другий варіант завдання конструктора за замовчуванням – це завдання значень за замовчуванням для всіх параметрів.

Point(char Nam=’A', int X=0,int Y=0){name=Nam;x=X;y=Y;}

Таким чином, конструктор за замовчуванням не має параметрів (або всі його параметри повинні мати значення за замовчуванням) і викликається при створенні об'єкта, якому не задані аргументи. Слід уникати двозначності при виклику конструкторів. Одночасне використання цих конструкторів неприпустимо, тому що з'являється двозначність:

Point pp1(‘B'); -використовується другий конструктор

Point pp1; використовується або перший або другий з усіма параметрами за замовчуванням.

У цьому випадку, щоб усунути неоднозначність, досить вилучити з оголошення класу конструктор без параметрів.

При явному виклику конструктора за замовчуванням дужки не ставляться.

Ще раз –конструктор за замовчуванням створюється автоматично тільки якщо не визначений жоден конструктор класу, інакше помилка.

Конструктори копіювання

Конструктор копіювання створює об'єкт класу, копіюючи при цьому дані із уже існуючого об'єкта даного класу. Тому він повинен мати в якості єдиного параметра константне посилання на об'єкт класу ( const Т& ) або просто посилання на об'єкт класу ( Т&)Використання першого переважніше, тому що останній не дозволяє копіювати константні об'єкти.

Посилання передається щораз, коли новий об'єкт ініціалізуються значеннями існуючого об'єкта. Якщо ви не передбачили конструктор копіювання, компілятор генерує конструктор копіювання за замовчуванням.

В C++ розрізняють поверхневе й глибинне копіювання даних.

При поверхневім копіюванні відбувається почленне копіювання. При наявності в об'єкта членів, що є покажчиками, отримана копія об'єкта, швидше за все, буде непридатною. Конструктор копіювання за замовчуванням, створений компілятором здійснює поверхневе копіювання.

У випадку глибинного копіювання відбувається дійсне копіювання значень усіх змінних з однієї області пам'яті в іншу. Тому для класів, що містять покажчики й посилання, треба:

1. включати у визначення класу конструктор копіювання, який буде здійснювати глибинне копіювання

2. клас повинен містити конструктор копіювання, якщо він перевантажує оператор присвоювання.

Якщо в класі не визначений конструктор копіювання, компілятор намагається згенерувати, якщо потрібно, власний конструктор копіювання.


Поделиться:

Дата добавления: 2015-07-26; просмотров: 126; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты