double arrow

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

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

// окно со всеми параметрами по умолчанию

PopupWindow window;

// окно по указанным координатам

PopupWindow window_1(x,y);

// окно с указанными размерами

PopupWindow window_(x,y,width,height);

// окно, похожее на другое

PopupWindow window_3=window_2;

Реализация такого класса представлена в следующем листинге:

class PopupWindow

{

int x, y, width, height;

public:

PopupWindow();

PopupWindow(int, int);

PopupWindow(int, int, int, int);

PopupWindow(PopupWindow&);

};

// все значения по умолчанию

PopupWindow:: PopupWindow(){ x=y=100; width=height=100; };

// установить по умолчанию ширину и высоту

PopupWindow:: PopupWindow(int px, int py){ x=px; y=py; width=height=100; };

// инициализировать все переменные

PopupWindow:: PopupWindow(int px, int py, int w, int h){ x=px; y=py; width=w; height=h; };

// сделать один объект похожим на другой

PopupWindow:: PopupWindow(PopupWindow &pw){ x=pw.x; y=pw.y; width=pw.width; height=pw.height; };

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

Перегруженные конструкторы копирования часто вообще обеспечивают краткость при создании новых экземпляров класса. Можно указать, какие изменить параметры для копируемого объекта. Например:

PopupWindow::PopupWindow(PopupWindow &pw, int px, int py)

{

x=px;

y=py;

width=pw.width;

height=pw.height;

};

Приведённый код копирует некоторые или все переменные объекта, указанного ссылкой, но какие-то переменные нового (скопированного) объекта инициализирует по-другому. Можно определить неограниченное количество конструкторов копирования, но все они должны различаться своими параметрами.


Сейчас читают про: