Практическое руководство по конструкторам C++: конструкция по умолчанию, параметризованная конструкция, конструкция копирования и конструкция перемещения.
Практическое руководство по конструкторам C++: конструкция по умолчанию, параметризованная конструкция, конструкция копирования и конструкция перемещения.

конструктор С++

Конструктор — это специальная функция-член в C++, которая автоматически вызывается при создании объекта класса. Он используется для инициализации состояния объекта, например присвоения начальных значений свойствам. Конструктор имеет то же имя, что и класс, и не имеет типа возвращаемого значения.

Тип конструктора

C++ поддерживает несколько типов конструкторов для удовлетворения различных потребностей инициализации:

  • конструктор по умолчанию: Конструктор, который не принимает параметров и обычно используется для инициализации состояния объекта по умолчанию.
  • Конструктор с параметрами: Позволяет передавать параметры для инициализации состояния объекта.
  • конструктор копирования: Используется для создания нового объекта из другого существующего объекта.
  • переместить конструктор: Используется для передачи ресурсов из временного объекта, который скоро будет уничтожен, в новый объект.

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

конструктор по умолчаниюэто самый простой Конструктор,не принимает никаких параметров。Обычно его используют дляобъект Установить значения по умолчанию для свойств,Или выполнить простые операции инициализации.

Язык кода:c++
копировать
class Person {
public:
  string name;
  int age;

  Person() { // конструктор по умолчанию
    name = "Unknown";
    age = 0;
  }
};

int main() {
  Person p1; // создавать Person объект
  cout << p1.name << ", " << p1.age << endl; // Выход: Неизвестно, 0

  return 0;
}

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

Конструктор с параметрами Позволяет передавать параметры для инициализации состояния Объект может быть любым допустимым. C++ Типы данных, включая базовые типы, объекты пользовательских классов и указатели.

Язык кода:c++
копировать
class Car {
public:
  string brand;
  string model;
  int year;

  Car(string b, string m, int y) { // Конструктор с параметрами
    brand = b;
    model = m;
    year = y;
  }
};

int main() {
  Car car1("Ford", "Mustang", 1967); // создавать Car объект и передать параметры
  cout << car1.brand << " " << car1.model << " " << car1.year << endl; // Выход: Форд Mustang 1967

  return 0;
}

конструктор копирования

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

Язык кода:c++
копировать
class Person {
public:
  string name;
  int age;

  Person(const Person& other) { // конструктор копирования
    name = other.name;
    age = other.age;
  }
};

int main() {
  Person p1("Alice", 30); // создавать Person объект
  Person p2(p1); // конструктор копированиясоздавать p2

  cout << p2.name << ", " << p2.age << endl; // Выход: Алиса, 30

  return 0;
}

переместить конструктор

переместить конструктор Используется для передачи ресурсов из временного объекта, который скоро будет уничтожен, в новый объект.его обычно используют для Избегайте ненужных ресурсовкопировать,и улучшить производительность。

Язык кода:c++
копировать
class Person {
public:
  string name;
  int age;

  Person(Person&& other) { // переместить конструктор
    name = std::move(other.name);
    age = other.age;

    // Воля other ресурсы, переданные в this
  }
};

int main() {
  Person p1("Bob", 25); // создавать Person объект

  Person p2(std::move(p1)); // переместить конструкторсоздавать p2

  cout << p2.name << ", " << p2.age << endl; // Выход: Боб, 25
  cout << p1.name << ", " << p1.age << endl; // Выход:, 0 (p1 ресурсы перенесены)

  return 0;
}

Контроль доступа конструктора

Доступом к конструкторам можно управлять с помощью модификаторов контроля доступа, например. publicprivate и protected

  • public:Конструктор Можно вызвать где угодно за пределами класса。
  • private:Конструктор Можно вызвать только внутри класса。
  • protected:Конструктор Может быть вызван внутри класса или его подклассов.。

Подвести итог

Конструктор C++ важные аспектыобъектмеханизм программирования,для инициализациииуправлятьобъектстатус。Понимая различные типы Конструктори его использование,ты можешьсоздавать Прочный и ремонтопригодный C++ код.

наконец

Для того, чтобы облегчить друзьям на других устройствах и платформах просмотр предыдущих статей:

Поиск общедоступной учетной записи WeChat:Let us Coding,сосредоточиться Вы можете получить последнюю статью после

Если вы нашли это полезным после прочтения, пожалуйста, поставьте лайк, соберите и подпишитесь

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода