💀
Второй курс РПО
C++
C++
  • Свойства и типы
  • Блок-схемы
  • Visual Studio
  • Первый проект
  • Вывод данных
  • Типы данных
  • Переменные и Константы
  • Ввод данных
  • Литералы
  • Задание [ ! ]
  • Первая практическая
  • Операторы в языке программирования
  • Арифметические операции в C++
  • Применение арифметических операций
  • Практическая работа №2
  • Практическая работа №3
  • Логические операции
    • Справочник по командам
  • Практическая работа №4
  • Практическая работа №5
  • Массивы
    • Спец. задание
  • ⚙️Справочник по C++
  • Домашнее задание №1
  • Функции
    • Более краткая версия
  • Практическая работа №6
  • Указатели
  • Задание на экране 12.12
  • Введение в строки
  • Перегрузка функций в C++
  • Функции класса
  • Полезные штуки
  • Работа с классами в C++
  • Дружественные классы в C++
Powered by GitBook
On this page
  • Объявление и определение функций класса в C++
  • Синтаксис
  • Пример
  • Делегирование конструкторов
  • Преимущества разделения объявления и определения

Функции класса

26.12.2024

Объявление и определение функций класса в C++

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


Синтаксис

Для определения функции вне класса используется оператор разрешения области видимости :::

return_type ClassName::FunctionName(parameters) {
    // тело функции
}

Пример

Рассмотрим класс Person с разделением объявления и определения функций:

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    unsigned age;
public:
    Person(std::string p_name, unsigned p_age); // объявление конструктора
    void print(); // объявление метода print
};

// определение конструктора
Person::Person(std::string p_name, unsigned p_age) {
    name = p_name;
    age = p_age;
}

// определение метода print
void Person::print() {
    std::cout << "Name: " << name << "\tAge: " << age << std::endl;
}

int main() {
    Person tom("Tom", 38);
    tom.print(); // вывод: Name: Tom   Age: 38
    return 0;
}

В этом примере конструктор и метод print объявлены внутри класса Person, но их определения вынесены за пределы класса.


Делегирование конструкторов

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

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    unsigned age;
public:
    Person(std::string p_name, unsigned p_age);
    Person(std::string p_name);
    void print();
};

// определение основного конструктора
Person::Person(std::string p_name, unsigned p_age) {
    name = p_name;
    age = p_age;
}

// делегирование конструктора
Person::Person(std::string p_name) : Person(p_name, 18) { }

void Person::print() {
    std::cout << "Name: " << name << "\tAge: " << age << std::endl;
}

int main() {
    Person tom("Tom", 39);
    tom.print(); // вывод: Name: Tom   Age: 39

    Person bob("Bob");
    bob.print(); // вывод: Name: Bob   Age: 18

    return 0;
}

Здесь конструктор Person(std::string p_name) делегирует инициализацию другому конструктору, устанавливая значение возраста по умолчанию равным 18.


Преимущества разделения объявления и определения

  • Улучшенная читаемость: Интерфейс класса становится более понятным без деталей реализации.

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

  • Инкапсуляция: Скрытие реализации способствует лучшему управлению доступом к данным класса.

PreviousПерегрузка функций в C++NextПолезные штуки

Last updated 5 months ago