Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / Лекции 1-2.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
142.98 Кб
Скачать

Int main() {

Something a; // a.m_length = 3.5, a.m_width = 3.5

a.print();

return 0;

}

Результат выполнения программы:

length: 3.5 and width: 3.5

Таким образом, вы предоставляете значения по умолчанию вашим переменным-членам, которые будут использоваться вашими конструкторами, если сами конструкторы не предоставят эти значения (через списки инициализации членов).

Однако конструкторы все еще определяют какие объекты, могут быть созданы, например:

#include <iostream>

class Something {

private:

double m_length = 3.5;

double m_width = 3.5;

public:

// Обратите внимание, здесь нет конструктора по умолчанию

Something(double length, double width):

m_length(length), m_width(width) {

// m_length и m_width инициализируются этим конструктором //(значения по умолчанию, приведенные выше, не используются!!!)

}

Void print() {

std::cout << "length: " << m_length << ", width: " << m_width << '\n';

}

};

Int main() {

Something a; // не скомпилируется, так как требуется конструктор по //умолчанию, даже если члены класса имеют значения по умолчанию!!!!

return 0;

}

Несмотря на то, что мы предоставили значения по умолчанию всем переменным-членам класса, конструктор по умолчанию предоставлен не был, поэтому мы не можем создать объект класса Something без параметров.

Если предоставлено значение по умолчанию, и конструктор инициализирует член через список инициализации членов, то приоритет будет у списка инициализации членов!!!:

#include <iostream>

class Something {

private:

double m_length = 3.5;

double m_width = 3.5;

public:

Something(double length, double width)

: m_length(length), m_width(width) {

// m_length и m_width инициализируются конструктором (значения по //умолчанию, приведенные выше, не используются)

}

Void print() {

std::cout << "length: " << m_length << " and width: " << m_width << '\n';

}

};

Int main() {

Something a(4.5, 5.5);

a.print();

return 0;

}

Результат выполнения программы:

length: 4.5 and width: 5.5

Правило: Используйте инициализацию нестатических членов для указания значений по умолчанию переменным-членам.

Задание №1

Добавьте в следующую программу инициализацию нестатических членов и список инициализации членов:

#include <string>

#include <iostream>

class Thing {

private:

std::string m_color;

double m_radius;

public:

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

Thing() {

m_color = "blue";

m_radius = 20.0;

}

// Конструктор с параметром color (для radius предоставлено //значение по умолчанию)

Thing(const std::string &color) {

m_color = color;

m_radius = 20.0;

}

// Конструктор с параметром radius (для color предоставлено //значение по умолчанию)

Thing(double radius) {

m_color = "blue";

m_radius = radius;

}

// Конструктор с параметрами color и radius

Thing(const std::string &color, double radius) {

m_color = color;

m_radius = radius;

}