Exercícios resolvidos em C++ ( #1)

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 :)

Baixar exemplos

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.