MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Declararea și definirea funcțiilor clasei

În limbajul C++, este posibil să separi declarația și definirea funcțiilor, inclusiv pentru funcțiile care sunt create în clase. Pentru aceasta se folosește expresia nume_clasă::nume_funcție(parametri) { corpul_funcției }.

De exemplu, să luăm următoarea clasă 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;
    }
};

Să separăm clasa, mutând implementarea metodelor ei în afara clasei:

#include <iostream>
 
class Person 
{
private:
    std::string name;
    unsigned age;
public:
    Person(std::string p_name, unsigned p_age);
    void print();
};
// constructorul
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
}

Acum funcțiile clasei Person (în acest caz constructorul și funcția print) au doar declarațiile în interiorul clasei. Implementările funcțiilor sunt plasate în afara clasei Person.

Ieșirea în consolă a programului:

Name: Tom	Age: 38

O astfel de separare simplifică vizualizarea și înțelegerea interfeței clasei, mai ales când funcțiile conțin mult cod.

În această organizare a codului, putem de asemenea să folosim delegarea constructorului:

#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();
};
// constructorul
Person::Person(std::string p_name, unsigned p_age)

    name = p_name; 
    age = p_age;
}
// delegarea constructorului
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
}