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

Последнее обновление: 09.03.2023

В языке C++ можно разделять объявление и определение функций в том числе по отношению к функциям, которые создаются в классах. Для этого используется выражение имя_класса::имя_функции(параметры) { тело_функции}.

Например, возьмем следующий класс Person:

class Person 
{
private:
    std::string name;
    unsigned age;
public:
    Person(std::string p_name, unsigned p_age)
    { 
        name = p_name; 
        age = p_age;
    }
    void print() 
    {
        std::cout << "Name: " << name << "\tAge: " << age << std::endl;
    }
};

Разобъем класс, вынеся реализацию его методов во вне:

#include <iostream>

class Person 
{
private:
    std::string name;
    unsigned age;
public:
    Person(std::string p_name, unsigned p_age);
    void print();
};
// конструктор
Person::Person(std::string p_name, unsigned p_age)
{ 
    name = p_name; 
    age = p_age;
}
void Person::print() 
{
    std::cout << "Name: " << name << "\tAge: " << age << std::endl;
}
int main()
{
    Person tom{"Tom", 38};
    tom.print();    // Name: Tom   Age: 22
}

Теперь функции класса Person (в данном случае конструктор и функция print) в самом классе имеют только объявления. Реализации функций размещены вне класса Person.

Консольный вывод программы:

Name: Tom	Age: 38

Подобное разделение упрощает обзор и понимание интрефейса класса, особенно когда функции имеют много кода.

Три такой организации кода также можно делегировать конструктор:

#include <iostream>

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
}
Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850