class Quarto { //Classe pai
String tipoQuarto;
double valorDiaria;
int numeroDiarias;
Quarto(this.numeroDiarias, this.valorDiaria, this.tipoQuarto);
double get valorTotal => valorDiaria * numeroDiarias; // Cálculo de diarias usando Getter
void reservar() {
print("- Reserva confirmada para $numeroDiarias diária(s) no quarto padrão: $tipoQuarto.");
print("- Valor total: R\$ ${valorTotal.toStringAsFixed(2)}."); //Usa o getter valorTotal
}
}
// Herança simples - sem serviços adicionais
class QuartoSimples extends Quarto {
QuartoSimples (int numeroDiarias) : super(numeroDiarias, 80, 'Simples'); /* Chama construtor da classe pai */
}
// Herança + Polimorfismo (adiciona café da manhã)
class QuartoMedio extends Quarto {
QuartoMedio (int numeroDiarias) : super(numeroDiarias, 250, 'Médio');
void servirCafeDaManha() {
print("- Incluso o serviço de café da manhã no quarto padrão: $tipoQuarto.");
}
}
// Herança + Polimorfismo (adiciona café da manhã e serviço de quarto)
class QuartoLuxo extends Quarto {
QuartoLuxo (int numeroDiarias) : super(numeroDiarias, 1000, 'Luxo');
void servirCafeDaManha() {
print("- Incluso o serviço de café da manhã no quarto padrão: $tipoQuarto.");
}
void limparQuarto() {
print("- Incluso o serviço de limpeza do quarto no padrão: $tipoQuarto.");
}
}
void exibirTabelaPrecos() {
print("\n" + "=" * 62);
print(" TABELA DE PREÇOS");
print("=" * 62);
print("| Tipo de Quarto | Valor da Diária |");
print("-" * 62);
print("| Simples | R\$ 80,00 |");
print("| Médio | R\$ 250,00 |");
print("| Luxo | R\$ 1.000,00 |");
print("=" * 62);
print("\nServiços Inclusos:");
print(" - Simples: Hospedagem básica");
print(" - Médio: Hospedagem + Café da manhã");
print(" - Luxo: Hospedagem + Café da manhã + Serviço de quarto");
print("");
}
void main(){
exibirTabelaPrecos();
print("-" * 62);
print(" Reservas de Quartos");
print("-" * 62);
QuartoSimples quartoSimples = QuartoSimples(3);
quartoSimples.reservar();
print("");
QuartoMedio quartoMedio = QuartoMedio(5);
quartoMedio.reservar();
quartoMedio.servirCafeDaManha();
print("");
QuartoLuxo quartoLuxo = QuartoLuxo(7);
/* Quando reservar() é chamado, ele usa valorTotal internamente
valorTotal calcula: 1000 * 7 = R$ 7000.00*/
quartoLuxo.reservar();
quartoLuxo.servirCafeDaManha();
quartoLuxo.limparQuarto();
}