Defina uma classe base pessoa que contenha informação de propósito geral comum a todas as pessoas, como por exemplo o nome, a idade e a altura.
Esta classe deverá conter:
- um construtor por default, que inicializa os membros dado com “Indefenido”, 0 e 0.0;
- um construtor alternativo;
- o destruidor (vazio);
- os membros públicos setter/getter para acesso aos membros dado privados;
Escreva um programa que exemplifique a utilização da classe criada no ponto anterior (main.cpp).
Solução:
pessoa.h
#ifndef PESSOA_H #define PESSOA_H #include <string> class Pessoa { public: Pessoa(); Pessoa(std::string, int, double); ~Pessoa(); void setNome(std::string); void setIdade(int); void setAltura(double); std::string getNome(); int getIdade(); double getAltura(); private: std::string nome; int idade; double altura; // ... }; #endif //PESSOA_H
pessoa.cpp
#include "pessoa.h" Pessoa::Pessoa() { nome = "Indefenido"; idade = 0; altura = 0.0; } Pessoa::Pessoa(std::string novoNome, int novaIdade, double novaAltura) { nome = novoNome; idade = novaIdade; altura = novaAltura; } Pessoa::~Pessoa() { } void Pessoa::setNome(std::string novoNome) { nome = novoNome; } void Pessoa::setIdade(int novaIdade) { idade = novaIdade; } void Pessoa::setAltura(double novaAltura) { altura = novaAltura; } std::string Pessoa::getNome() { return nome; } int Pessoa::getIdade() { return idade; } double Pessoa::getAltura() { return altura; }
main.cpp
#include <iostream> #include "pessoa.h" int main() { //Utilizar o construtor default Pessoa p1; std::cout << p1.getNome() << " tem " << p1.getIdade() << " e mede " << p1.getAltura() << std::endl; //Utilizar um construtor que define os dados iniciais Pessoa p2("Manel", 33, 1.75); std::cout << p2.getNome() << " tem " << p2.getIdade() << " e mede " << p2.getAltura() << std::endl; //Alterar os dados de p1 e p2 recorrendo aos métodos set... p1.setNome("Maria"); p1.setIdade(18); p1.setAltura(1.65); std::cout << p1.getNome() << " tem " << p1.getIdade() << " e mede " << p1.getAltura() << std::endl; }
Observações:
Será publicada brevemente …
Uma abordagem alternativa
Como devem ter reparado, evitei o uso da linha “using namespace std“!
Se não fosse o caso, teríamos a versão seguinte, que apesar de pouco diferir em aspeto, representa uma pior opção em termos de programação em C++.
pessoa.h
#ifndef PESSOA_H #define PESSOA_H #include <string> using namespace std; class Pessoa { public: Pessoa(); Pessoa(string, int, double); ~Pessoa(); void setNome(string); void setIdade(int); void setAltura(double); string getNome(); int getIdade(); double getAltura(); private: string nome; int idade; double altura; // ... }; #endif //PESSOA_H
pessoa.cpp
#include "pessoa.h" Pessoa::Pessoa() { nome = "Indefenido"; idade = 0; altura = 0.0; } Pessoa::Pessoa(string novoNome, int novaIdade, double novaAltura) { nome = novoNome; idade = novaIdade; altura = novaAltura; } Pessoa::~Pessoa() { } void Pessoa::setNome(string novoNome) { nome = novoNome; } void Pessoa::setIdade(int novaIdade) { idade = novaIdade; } void Pessoa::setAltura(double novaAltura) { altura = novaAltura; } string Pessoa::getNome() { return nome; } int Pessoa::getIdade() { return idade; } double Pessoa::getAltura() { return altura; }
main.cpp
#include <iostream> #include "pessoa.h" using namespace std; int main() { //Utilizar o construtor default Pessoa p1; cout << p1.getNome() << " tem " << p1.getIdade() << " e mede " << p1.getAltura() << endl; //Utilizar um construtor que define os dados iniciais Pessoa p2("Manel", 33, 1.75); cout << p2.getNome() << " tem " << p2.getIdade() << " e mede " << p2.getAltura() << endl; //Alterar os dados de p1 e p2 recorrendo aos métodos set... p1.setNome("Maria"); p1.setIdade(18); p1.setAltura(1.65); cout << p1.getNome() << " tem " << p1.getIdade() << " e mede " << p1.getAltura() << endl; }
Se podemos programar assim?
Podemos, mas não seria a mesma coisa :)