Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Конструктор




Специальные функции-элементы

Это некоторые функции – члены класса, от которых зависят способы создания, копирования, преобразования и уничтожения объектов класса. Часто эти функции создаются по умолчанию. Ниже будут рассмотрены некоторые специальные функции-члены: конструктор, конструктор копирования, операция присваивания, функции преобразования, деструктор.

 

Это функция – элемент с тем же именем, что и имя класса. Она вызывается компилятором всегда, когда создается объект класса. Конструктор ничего не возвращает. Поэтому для него не указывается тип результата. Он не наследуется, не может быть const, volatile, static, virtual.

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

имя_класса ()

{

}

Это т.н. пустой конструктор.

Конструктор, как и другие функции, может быть перегружен. В частности, помимо пустого конструктора, вызываемого только при создании объекта, можно также определить конструктор, который при создании объекта инициализирует его элементы – данные. Это можно сделать как в теле конструктора, так и с помощью списка инициализации элементов. Если есть константные (только для чтения) элементы – данные, то можно использовать только список инициализации.

Пример инициализации в теле конструктора

class coord

{

float x, y;

public:

coord (float a, float b)

{

x=a;

y=b;

}

};

void main ()

{

coord w (2.5, 12.3);

}

При создании объекта w класса coord будет вызван конструктор. Его формальные параметры а и b приобретут соответственно значения 2.5 и 12.3.

Выше уже было сказано, что константные элементы – данные можно инициализировать только с помощью списка инициализации. Этот список отделяется двоеточием (:) от заголовка определения конструктора и содержит элементы-данные (и базовые классы), разделенные запятыми.

Пример.

class coord

{

const float x,y;

public:

coord(float a, float b):x(a),y(b)

{

}

};

void main()

{

coord w(2.5, 12.3);

}

Для неконстантных элементов-данных инициализацию можно призводить или в теле конструктора, или с помощью списка инициализации. Однако список инициализации является обязательным также, если элементом данных одного класса служит объект ранее описанного класса и конструктор этого (ранее описанного) класса реализует инициацию элементов данных любым из двух способов.

Это единственный механизм инициализации в данном случае.

Пример

class coord

{

const float x,y;

public:

coord(float a, float b):x(a),y(b)

{

}

};

class map

{

coord w;

public:

map (float_x, float_y):w(_x,_y)

{

}

};

void main ()

{

map q(1Ø,15); //При создании объекта q класса map передаются данные для //инициализации x(a), x(b)

}




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


Дата добавления: 2015-06-27; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.