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

Конструкторы

Читайте также:
  1. Конструкторы и деструкторы
  2. Конструкторы и деструкторы. Автоматическая инициализация. Список инициализации элементов.
  3. Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы.
  4. Наследование. Множественное наследование. Конструкторы при множественном наследовании. Роль наследования при разработке программ.
  5. Наследование. Понятие наследования. Конструкторы порожденного класса. Иерархия классов. Абстрактный базовый класс.

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

Конструктор - это метод, выполняющийся автоматически в момент создания объекта.

Конструктор отличается от других методов:

1) Имя конструктора совпадает с именем класса;

2) У конструктора не существует возвращаемого значения.

Заменим метод InitPoint() на конструктор:

class TPoint

{ private:

int x,y;

public:

TPoint(int newx, int newy) // конструктор

{

x=newx;

y=newy;

}

void relmove (int dx, int dy)

{x+= dx; y += dy; }

int getx (void)

{ return x; }

int gety (void)

{ return y; }

};

int main(int argc, char *argv[])

{

class TPoint p(10,10); //инициализация объекта р

printf("x=%d, y=%d\n", p.getx(), p.gety());

...

}

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

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

#include "stdafx.h"

#include "iostream"

class Counter

{ private:

int count;

public:

Counter ():count(0){ } //конструктор

void inc_count ()//метод увеличения счетчика на 1

{count++; }

int get_count()//метод возвращает значение счетчика

{ return count; }

};

int _tmain(int argc, _TCHAR* argv[])

{ Counter c1, c2;//создание объектов c1 и c2

std::cout<<c1.get_count()<<std::endl;

std::cout<<c2.get_count()<<std::endl;

c1.inc_count(); c1.inc_count(); //увеличение с1 на 2

c2.inc_count(); //увеличение с2 на 1

std::cout<<c1.get_count()<<std::endl;

std::cout<<c2.get_count()<<std::endl;

return 0;}

Результаты программы приведены на рисунке 2.3.

Рисунок 2.3. – Результаты работы программы

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

Counter ():count(0)

{/* тело функции*/ }

Если инициализируются несколько полей, то значения разделяются запятыми.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)