Construtor e destruidor de classe C ++

O Construtor de Classe

Uma aula constructor é uma função-membro especial de uma classe que é executada sempre que criamos novos objetos dessa classe.

Um construtor terá exatamente o mesmo nome da classe e não terá nenhum tipo de retorno, nem mesmo void. Os construtores podem ser muito úteis para definir valores iniciais para certas variáveis ​​de membro.

O exemplo a seguir explica o conceito de construtor -

#include <iostream>
 
using namespace std;
 
class Line {
   public:
      void setLength( double len );
      double getLength( void );
      Line();  // This is the constructor
   private:
      double length;
};
 
// Member functions definitions including constructor
Line::Line(void) {
   cout << "Object is being created" << endl;
}
void Line::setLength( double len ) {
   length = len;
}
double Line::getLength( void ) {
   return length;
}

// Main function for the program
int main() {
   Line line;
 
   // set line length
   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <<endl;
 
   return 0;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Object is being created
Length of line : 6

Construtor Parametrizado

Um construtor padrão não tem nenhum parâmetro, mas se você precisar, um construtor pode ter parâmetros. Isso ajuda você a atribuir um valor inicial a um objeto no momento de sua criação, conforme mostrado no exemplo a seguir -

#include <iostream>
 
using namespace std;
class Line {
   public:
      void setLength( double len );
      double getLength( void );
      Line(double len);  // This is the constructor
 
   private:
      double length;
};
 
// Member functions definitions including constructor
Line::Line( double len) {
   cout << "Object is being created, length = " << len << endl;
   length = len;
}
void Line::setLength( double len ) {
   length = len;
}
double Line::getLength( void ) {
   return length;
}

// Main function for the program
int main() {
   Line line(10.0);
 
   // get initially set length.
   cout << "Length of line : " << line.getLength() <<endl;
   
   // set line length again
   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <<endl;
 
   return 0;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Object is being created, length = 10
Length of line : 10
Length of line : 6

Usando listas de inicialização para inicializar campos

No caso de construtor parametrizado, você pode usar a seguinte sintaxe para inicializar os campos -

Line::Line( double len): length(len) {
   cout << "Object is being created, length = " << len << endl;
}

A sintaxe acima é igual à seguinte sintaxe -

Line::Line( double len) {
   cout << "Object is being created, length = " << len << endl;
   length = len;
}

Se, para uma classe C, você tiver vários campos X, Y, Z, etc., a serem inicializados, então use a mesma sintaxe e separe os campos por vírgula da seguinte maneira -

C::C( double a, double b, double c): X(a), Y(b), Z(c) {
   ....
}

The Class Destructor

UMA destructor é uma função de membro especial de uma classe que é executada sempre que um objeto de sua classe sai do escopo ou sempre que a expressão de exclusão é aplicada a um ponteiro para o objeto dessa classe.

Um destruidor terá exatamente o mesmo nome da classe prefixada com um til (~) e não pode retornar um valor nem aceitar parâmetros. O Destructor pode ser muito útil para liberar recursos antes de sair do programa, como fechar arquivos, liberar memórias etc.

O exemplo a seguir explica o conceito de destruidor -

#include <iostream>
 
using namespace std;
class Line {
   public:
      void setLength( double len );
      double getLength( void );
      Line();   // This is the constructor declaration
      ~Line();  // This is the destructor: declaration
 
   private:
      double length;
};
 
// Member functions definitions including constructor
Line::Line(void) {
   cout << "Object is being created" << endl;
}
Line::~Line(void) {
   cout << "Object is being deleted" << endl;
}
void Line::setLength( double len ) {
   length = len;
}
double Line::getLength( void ) {
   return length;
}

// Main function for the program
int main() {
   Line line;
 
   // set line length
   line.setLength(6.0); 
   cout << "Length of line : " << line.getLength() <<endl;
 
   return 0;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Object is being created
Length of line : 6
Object is being deleted