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
}