РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
693 of 815 menu

Делегирующий конструктор

Делегирующий конструктор в C++ - это конструктор, который в списке инициализации вызывает другой конструктор того же класса. Это позволяет избежать дублирования кода при наличии нескольких конструкторов, выполняющих схожую инициализацию. Делегирующий конструктор указывается в списке инициализации после двоеточия и имеет вид ClassName(args). Такой вызов должен быть единственным элементом в списке инициализации - нельзя одновременно делегировать и инициализировать поля напрямую.

Синтаксис

ClassName(parameters) : ClassName(other_parameters) { // body }

Пример

Давайте создадим класс Point с тремя конструкторами, где два конструктора делегируют инициализацию основному:

#include <iostream> using namespace std; class Point { private: int x; int y; public: Point(int x, int y) : x(x), y(y) { cout << "Main constructor" << endl; } Point(int x) : Point(x, 0) { cout << "Delegating constructor 1" << endl; } Point() : Point(0, 0) { cout << "Delegating constructor 2" << endl; } void print() { cout << x << " " << y << endl; } }; int main() { Point p1(1, 2); p1.print(); Point p2(3); p2.print(); Point p3; p3.print(); return 0; }

Результат выполнения кода:

"Main constructor" 1 2 "Main constructor" "Delegating constructor 1" 3 0 "Main constructor" "Delegating constructor 2" 0 0

Пример

Давайте создадим класс Rectangle, в котором конструктор с одним параметром делегирует инициализацию конструктору с двумя параметрами, создавая квадрат:

#include <iostream> using namespace std; class Rectangle { private: int width; int height; public: Rectangle(int width, int height) : width(width), height(height) { } Rectangle(int side) : Rectangle(side, side) { } int area() { return width * height; } }; int main() { Rectangle rect1(3, 4); cout << rect1.area() << endl; Rectangle rect2(5); cout << rect2.area() << endl; return 0; }

Результат выполнения кода:

12 25

Смотрите также

  • конструктор constructor,
    который инициализирует объект класса
  • список инициализации ctor-init,
    который задает начальные значения полей
  • конструктор копирования copy-ctor,
    который создает копию объекта
  • конструктор перемещения move-ctor,
    который перемещает ресурсы объекта
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить