Destrutores de objeto-membro. Escreva um programa que demonstre que os destrutores de objeto-membro são chamados somente naqueles objetos membros que foram construídos antes que ocorresse uma exceção

Passo 1

Com o propósito de demonstrar o lançamento de exceções de um construtor, iremos:

Crie uma classe Employee que armazenará:

Nome, que não pode ficar vazio. Se for, lance uma exceção.

Sobrenome, que não pode ficar vazio. Se for, lance uma exceção.

Número de segurança social, que não pode ter mais ou menos de 11 caracteres. Se isso acontecer, lance uma exceção.

Salário mensal, que deve estar entre 500 e 10.000. Se não for, abra uma exceção.

Horário de trabalho diário, que deve ser entre 2 e 12 horas. Se não estiverem, lance uma exceção.

A classe lançará uma exceção do tipo employeeException.

Um construtor passará informações sobre a falha usando uma mensagem na exceção.

Passo 2

Employee.h

#pragma once

#include

#include

#include "employeeException.h"

using namespace std;

class Employee

{

private:

string firstName;

string lastName;

double monthlySalary;

string ssn;

int workHoursDaily;

public:

Employee(string firstName, string lastName, double monthlySalary, string ssn, int workHoursDaily) {

try {

if (firstName.length() == 0) throw employeeException("First name cannot be empty!");

if (lastName.length() == 0) throw employeeException("Last name cannot be empty!");

//9 digits and two dashes = 11

if (ssn.length() != 11) throw employeeException("Social security number must have 9 digits!");

if (monthlySalary 10000) throw employeeException("Monthly salary must be greater than 500 and less than 10000!");

if (workHoursDaily 12) throw employeeException("Daily work hours must be greater than 2 and less than 12!");

this->firstName = firstName;

this->lastName = lastName;

this->monthlySalary = monthlySalary;

this->ssn = ssn;

this->workHoursDaily = workHoursDaily;

cout

}

catch(employeeException e){

cout

}

}

};

Passo 3

employeeException.h

#pragma once

#include

using namespace std;

class employeeException: public runtime_error

{

public:

employeeException(const char* message) : runtime_error(message) {

};

};

Vamos testar nossa classe em main:

Resposta

Crie uma classe que lançará exceções do construtor e passará as informações sobre a falha do construtor com uma mensagem na exceção.