Rabochy_stol / 21 конструкторы классов
.docx21 конструкторы классов
Конструктор по умолчанию
Конструктором по умолчанию для класса Х называется такой онструктор, который не принимает никаких аргументов:
Х::Х(). Если длякласса несуществует конструкторов, определяемых пользователем, то Turbo C++ генерирует конструктор по умолчанию. При таких объявлениях, как Х х, конструктор по умолчанию создает объект х.
Важное примечание:
Как и все функции, конструкторымогут иметь аргументы по умолчанию. Например, конструктор
X::X(int, int = 0)
можетпринимать один или два аргумента. Если данный конструктор будет представлен только с одним аргументом,не-достающий второй аргумент будет принят как int 0. Аналогичным образом, конструктор
X::X(int = 5, int = 6)
может принимать двааргумента, один аргумент, либо не принимать аргументов вообще,причем в каждом случаепринимают-ся соответствующие умолчания. Однако, конструктор по умолча-нию Х::Х() не ринимаетаргументов вообще, иего не следуетпутать с конструктором, например, X::X(int = 0), который мо-жет либо принимать один аргумент, либо не принимать аргумен-тов.
При вызове конструкторов следует избегать неоднознач-ностей. В следующем примере возможно неоднозначноевосприятие компилятором конструкторапо умолчанию и конструк-тора, принимающего целочисленный параметр:
class X
(* public: X(); X(int i = 0); *);
main() (*
X one(10); // так можно: используется X::X(int)
X two; // так нельзя; неоднозначно задано, используется
// ли X::X() или X::X(int = 0) ... return 0;
Конструктор копирования
Конструктор копированиядля класса Х это такой конструктор, который может быть вызван с одним единственным аргументом типа X: X::X(const X&) или X::(const X&, int = 0). Вконструкторе копирования допустимыми такжеявляются аргументыпо умолчанию. Конструкторыкопирования запускаются при копировании объекта данного класса, обычно в случае объявления синициализацией объектом другого класса: X x = y. Turbo C++
генерирует конструктор копирования для класса X автоматически, если такой конструктор необходим, но в классе Х неопределен.