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