Конструкторы C++:использование аргументов по умолчанию для гибкого создания объектов
Конструктор — это специальная функция-член класса, которая автоматически вызывается при создании объекта. Они используются для инициализации объекта со значениями или настройками по умолчанию.
В то время как аргументы по умолчанию в C++ позволяют указывать значения по умолчанию для параметров функции или конструктора.
Конструктор с аргументами по умолчанию
Конструктор с аргументами по умолчанию — это конструктор, который позволяет создавать объект с использованием необязательных параметров. Здесь указаны значения по умолчанию для параметров, поэтому, когда пользователь не передает никаких значений, используется значение по умолчанию.
Синтаксис
Вот синтаксис конструктора с аргументами по умолчанию:
class ClassName {
public:
ClassName(parameter_Type parameter_Name = default_Value,
parameter_Type2 parameter_Name2 = default_Value2);
};
- Здесь конструктор имеет то же имя, что и класс
- Для одного или нескольких параметров указаны значения по умолчанию.
- Если пользователь не передает никакого значения, будет использоваться значение по умолчанию.
Пример конструктора с аргументами по умолчанию
Вот следующий пример конструктора с аргументами по умолчанию:
#include <iostream>
using namespace std;
// Function with a default argument
void printMessage(string message = "Hello, Tutorialspoint Learner") {
cout << message << endl;
}
int main() {
// Calling the function without an argument
printMessage(); // Prints the default message: "Hello, World!"
// Calling the function with a custom argument
printMessage("Hi, there!"); // Prints the custom message: "Hi, there!"
return 0;
}
Вывод
Hello, Tutorialspoint Learner Hi, there!
Объяснение
- Функция printMessage() создается, предоставляя параметру значение по умолчанию «Привет, Tutorialspoint Learner».
- Теперь в main(), printMessage() Функция вызывается без каких-либо аргументов, поэтому используется аргумент по умолчанию «Привет, учащийся Tutorialspoint».
- тогда как в printMessage("Привет!") , мы явно передали значение «Привет!» поэтому это переопределит аргумент по умолчанию.
Конструктор с несколькими аргументами по умолчанию
Конструктор с несколькими аргументами по умолчанию дает пользователю доступ к указанию значений по умолчанию для более чем одного параметра. Это обеспечивает большую гибкость и возможность передачи любой комбинации аргументов.
Пример
Вот следующий пример конструктора с несколькими аргументами по умолчанию:
#include <iostream>
using namespace std;
class Box {
public:
int length, width, height;
// Constructor with multiple default arguments
Box(int l = 5, int w = 10, int h = 2) { // Default values for length, width, and height
length = l;
width = w;
height = h;
}
void display() {
cout << "Length: " << length << ", Width: " << width << ", Height: " << height << endl;
}
};
int main() {
// Creating objects with different numbers of arguments
Box box1;
Box box2(15);
Box box3(15, 20);
Box box4(15, 20, 25);
// Displaying the objects' values
box1.display();
box2.display();
box3.display();
box4.display();
return 0;
}
Вывод
Length: 5, Width: 10, Height: 2 Length: 15, Width: 10, Height: 2 Length: 15, Width: 20, Height: 2 Length: 15, Width: 20, Height: 25
Объяснение
- Во-первых, класс box определяется тремя общедоступными переменными-членами:длиной и шириной, где конструктор Box(int l =5, int w =10, int h =2) имеет аргументы по умолчанию для всех трех параметров.
- В объекте Box box1; аргумент не указан, поэтому конструктор по умолчанию вызывается со значениями по умолчанию, в результате чего получается «Длина:5, Ширина:10, Высота:2».
- В Box box2(15); длина указана как 15, но ширина и высота не указаны, поэтому используются значения по умолчанию соответственно.
- В Box box3(15, 20); длине и ширине присвоены значения 15 и 20 соответственно, поэтому значения по умолчанию будут переопределены и результат будет соответствующим.
Основные особенности конструкторов с аргументами по умолчанию
Хотя он похож на обычные функции, он обеспечивает большую гибкость и удобство при создании объектов.
Ниже мы обсудим все его ключевые особенности.
1. Значения параметров по умолчанию и гибкость при создании объектов
Здесь конструктор может иметь значения по умолчанию для одного или нескольких параметров, которые можно использовать, когда вызывающая сторона не предоставляет аргументов, и допускает несколько способов создания объекта.
2. Как избежать многократной перегрузки конструктора
Возможно, вам придется загружать конструктор для каждой комбинации аргументов, что сделает код более громоздким, но с аргументами по умолчанию конструктор можно написать один раз, и он будет автоматически обрабатывать различные случаи.
3. Порядок аргументов по умолчанию
В случае нескольких параметров значений по умолчанию вы не можете пропустить аргументы по умолчанию в середине, если начнете предоставлять значения по умолчанию справа.
Синтаксис
Box(int l = 1, int w); // Invalid: 'w' has no default, but 'l' does.
4. Аргументы по умолчанию можно использовать с константными членами
Если ваш класс имеет константные члены, то в конструкторе можно указать аргументы по умолчанию, чтобы упростить инициализацию.
Синтаксис
class Box {
public:
const int length, width;
Box(int l = 5, int w = 10) : length(l), width(w) {}
};
Этот конструктор использует аргументы по умолчанию (длина =5 и ширина =10) для инициализации константных членов.
Язык C