Неділя, 12.01.2025
Все про все



Хочу заказать чертеж или деталь в Компас 3D.




Группа ВК
Меню сайту
Форма входу
Категорії розділу
C++ [10]
C [6]
Вміст сайту
Коментарі: 28
Форум: 2/2
Фото: 109
Блог: 69
Новини: 9
Файли: 18
Тексти: 664
Сайти: 2
Дошка оголошень: 9
Відео: 14
Гостьова книга: 10
Теги
c++ (10)
nod 32 (4)
Заробіток
//wmlink.ru/index.php?ref=240844
Головна » Статті » Програмування » C++

Поділися матеріалом в соц. мережах
Якщо вам не важко, можете прийняти участь в цьому опитуванні =)
Ви робили колись кунілінгус ? =)*
Всего ответов: 412
RUS Уроки по программированию на языке С++ (Перегруженные конструкторы.)


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

В прошлом уроке вы познакомились с основами ООП - и узнали о понятии класса. Сегодня мы с вами продолжим это приятное знакомство. Мы уже выяснили, конструкторы могут иметь параметры. Для этого просто нужно добавить эти параметры в объявление и определение конструктора, а затем, при создании объекта, задать их в качестве аргументов. Теперь к нашим знаниям добавим еще одно - конструкторов может быть несколько. Рассмотрим пример:

# include <iostream>
using namespace std;

class _3D 
{
 double x, y, z;
 public:
 _3D ();
 _3D (double initX, double initY, double initZ);
};

//конструктор класса _3D с параметрами
_3D::_3D(double initX, double initY, double initZ)
{
 x = initX;
 y = initY;
 z = initZ;
 cout << "\nWhis arguments!!!\n"; 
}

//конструктор класса _3D без параметров
_3D::_3D()
{
 x=y=z=0;
 cout << "\nNo arguments!!!\n"; 
}


void main()
{
 //создается объект A, вызывается
 //конструктор без параметров
 //все члены класса инициализируются нулем
 //на экране надпись "No arguments!!!"
 _3D A; 
 
 //создается объект B, вызывается
 //конструктор c параметрами
 //все члены класса инициализируются 
 //соответствующими переменными
 //на экране надпись "Whis arguments!!!"
 _3D B (3,4,0); 
}
Примечание: Кстати!!! В отличие от конструктора, деструктор не может быть перегружен, так как не имеет параметров. Это вполне логично, поскольку отсутствует механизм передачи параметров удаляемому объекту.
Комментарии к примеру и особенности использования.

1. Каждому способу объявления объекта класса должна соответствовать своя версия конструкторов класса. Если это не будет обеспечено, то при компиляции программы обнаружится ошибка на этапе компиляции.

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

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

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

Полезная информация.

Обратите внимание на то, что тела конструкторов описаны за пределами класса. В класс помещены только прототипы. Данная форма записи может быть использована и для обычных методов класса. Напомним, что в примерах прошлого урока тела методов описывались прямо в определении класса.

Как лучше и грамотнее, спросите вы?! Способ из прошлого урока используется для простых и коротких методов, которые в дальнейшем не предполагается изменять. Так поступают отчасти из-за того, что описания классов помещают обычно в файлы заголовков, включаемые затем в прикладную программу с помощью директивы #include. Кроме того, при этом способе машинные инструкции, генерируемые компилятором при обращении к этим функциям, непосредственно вставляются в оттранслированный текст. Это снижает затраты на их исполнение, поскольку выполнение таких методов не связано с вызовом функций и механизмом возврата, увеличивая в свою очередь размер исполняемого кода (то есть такие методы становятся inline или встраиваемыми).

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


Категорія: C++ | Додав: DEN-SHP (15.08.2013)
Переглядів: 876 | Теги: c++ | Рейтинг: 0.0/0
Поділися матеріалом в соц. мережах
Всього коментарів: 0
Додавати коментарі можуть лише зареєстровані користувачі.
[ Реєстрація | Вхід ]
Пошук
Реклама
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0

Проверка тиц pr счетчик посещений Яндекс.Метрика
Copyright DEN-SHP © 2025
Безкоштовний конструктор сайтів - uCozЯндекс.Метрика