Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Перегруженные конструкторы

Конструкторы по умолчанию

Конструктор без параметров называют конструктором по умолчанию. Такой конструктор обычно инициализирует переменные-члены, присваивая им стандартные, установленные по умолчанию значения. Например, следующий вариант класса CRectangle имеет конструктор по умолчанию, инициализирующий все данные значениями 0.

class CRectangle

{

private:int Left;int Top;int Right;int Bottom; public:CRectangle () {

Left = Top = Right = Bottom = 0;

}// определения других функций-членов...

};

Примечание

Конструктор с одним или более параметрами, имеющими стандартные значения, также считается конструктором по умолчанию, потому что его можно вызвать без передачи параметров (смотрите параграф "Стандартные параметры функции" в гл. 2).

Если конструктор для какого-либо класса не определен, то компилятор генерирует конструктор по умолчанию. Такие конструкторы, сгенерированные компилятором, не присваивают начальные значения переменным-членам класса. Поэтому, если необходимо однозначно инициализировать переменные-члены или выполнить любые другие задачи инициализации, нужно определить собственный конструктор.

Если класс имеет конструктор по умолчанию (явно определенный или сгенерированный компилятором), можно определить объект класса без передачи параметров, например:

CRectangle Rect;

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

CRectangle Rect (); // определение функции, которая не принимает // параметры и возвращает объект CRectangle

Если допустить такую ошибку, компилятор не сгенерирует сообщение об ошибке до тех пор, пока вы не попытаетесь использовать Rect как экземпляр класса.

В гл. 5 приведено описание особенностей конструкторов, использующих единственный параметр (в параграфе «Применение конструкторов копирования и преобразования»).

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

class Rectangle

{

private:int Left;int Top;int Right;int Bottom; public:// конструктор по умолчанию: CRectangle()CRectangle() {

Left = Top = Right = Bottom = 0;

}// конструктор с параметрами: CRectangle (int L, int T, int R, int 8){

SetCoord (L, T, R, B);

}// определения других функций-членов...

};

Следующий код демонстрирует использование перегруженного конструктора CRectangle.

void main()

{

// создание объекта с использованием конструктора по умолчанию: CRectangle Rectl;// создание объекта с указанием начальных значений: CRectangle Rect2 (25, 25, 100, 100);//...

}

Примечание

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

<== предыдущая лекция | следующая лекция ==>
Конструкторы | Константные объекты и функции-члены
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 466; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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