Neste começo de modulo começamos por falar de classes de derivadas, e dentro disso falamos de Herança
A herança é basicamente uma relação entre duas classes, sendo uma criada a partir de outra já existente.
A classe já existente designa-se de classe-base; A nova classe designa-se de classe-derivada.
Vou agora dar um pequeno exemplo:
Poligono.h
#ifndef POLIGONO_H
#define POLIGONO_H
#include <string>
using namespace std;
class Poligono{
//Definição Matemática
/*
Figura plana limitada por segmentos de recta, chamados lados dos polígonos
onde cada segmento de recta, intersecta exactamente dois outros extremos.
Exemplos de polígonos: http://pt.wikipedia.org/wiki/Polígono
*/
public:
Poligono();
void setNome(string novo_nome);
string getNome();
private:
string nome;
};
#endif //POLIGONO_H
Poligono.cpp
#include "Poligono.h"
Poligono::Poligono(){nome="Não definido!";}
void Poligono::setNome(string novo_nome){nome = novo_nome;}
string Poligono::getNome(){return nome;}
main.cpp
#include <iostream>
#include "Poligono.h"
using namespace std;
int main(){
Poligono figura1;
figura1.setNome("Quadrilátero");
cout << figura1.getNome() << endl;
}
No programa
- É composto por 3 ficheiros
- o primeiro é onde a classe é criada.
- No segundo define-se o nome.
- No main ele chama as funçoes criadas em Poligono.cpp neste caso o nome (getNome)
Para compilar:
g++ -Wall main.cpp Poligono.cpp -o p
./p
Nota:A esta versão serão juntos os ficheiros criados atrás Poligono.cpp e Poligono.h
Triangulo.h
#ifndef TRIANGULO_H
#define TRIANGULO_H
#include "Poligono.h"
class Triangulo : public Poligono {
public:
Triangulo();
void setLados(float new_lado, float new_altura);
float getLado();
float getAltura();
float area();
float Perimetro();
private:
float lado;
float altura;
};
#endif
Triangulo.cpp
#include "Triangulo.h"
Triangulo::Triangulo(){
lado = 3;
altura = 3;
}
void Triangulo::setLados(float new_lado, float new_altura){
lado = new_lado;
altura= new_altura;
}
float Triangulo::getLado(){return lado;}
float Triangulo::getAltura(){return altura;}
float Triangulo::area(){return lado*altura/2;}
float Triangulo::Perimetro(){return lado+lado+lado;}
Rectangulo.h
#ifndef RECTANGULO_H
#define RECTANGULO_H
#include "Poligono.h"
class Rectangulo : public Poligono {
public:
Rectangulo();
void setLados(float new_lado1, float new_lado2, float new_comprimento, float new_largura);
float getLado1();
float getLado2();
float getComprimento();
float getLargura();
float area();
float Perimetro();
private:
float lado1;
float lado2;
float comprimento;
float largura;
};
#endif
Rectangulo.cpp
#include "Rectangulo.h"
Rectangulo::Rectangulo(){
lado1 = 3;
lado2 = 3;
comprimento = 3;
largura = 3;
}
void Rectangulo::setLados(float new_lado1, float new_lado2, float new_comprimento, float new_largura){
lado1 = new_lado1;
lado2 = new_lado2;
comprimento = new_comprimento;
largura = new_largura;
}
float Rectangulo::getLado1(){return lado1;}
float Rectangulo::getLado2(){return lado2;}
float Rectangulo::getComprimento(){return comprimento;}
float Rectangulo::getLargura(){return largura;}
float Rectangulo::area(){return comprimento*largura;}
float Rectangulo::Perimetro(){return lado1 + lado2 + comprimento + largura;}
Quadrado.h
#ifndef QUADRADO_H
#define QUADRADO_H
#include "Poligono.h"
class Quadrado : public Poligono {
public:
Quadrado();
void setLados(float new_lado);
float getLado();
float area();
float Perimetro();
private:
float lado;
};
#endif
Quadrado.cpp
#include "Quadrado.h"
Quadrado::Quadrado(){
lado = 3;
}
void Quadrado::setLados(float new_lado){
lado = new_lado;
}
float Quadrado::getLado(){return lado;}
float Quadrado::area(){return lado*lado;}
float Quadrado::Perimetro(){return lado + lado + lado + lado;}
Depois de isto criado iremos agora pôr o menu. Este Menu será substituido pelo main:
menu.cpp
#include <iostream>
#include "Triangulo.h"
#include "Quadrado.h"
#include "Rectangulo.h"
#include <stdlib.h>
using namespace std;
int main(void){
Triangulo figura1;
Quadrado figura2;
Rectangulo figura3;
char opcao;
cout<<"Escolha uma de 3 opçoes: (t)=Triangulo, (x)=Quadrado, (r)=Rectangulo"<<endl;
cin>>opcao;
do{
if(opcao == 't'){
figura1.setNome("Triângulo");
figura1.setLados(10,9);
cout << "Nome : " << figura1.getNome() << endl;
cout << "Comprimento de cada 1 dos 3 lados : " << figura1.getLado() << endl;
cout << "altura: " <<figura1.getAltura() << endl;
cout << "Soma dos comprimentos dos lados: " << figura1.Perimetro() << endl;
cout << "a area e: "<<figura1.area() <<endl;
cout<<"(q) para sair"<<endl;
cin>>opcao;
}
if(opcao == 'x'){
figura2.setNome("Quadrado");
figura2.setLados(4);
cout << "Nome : " << figura2.getNome() << endl;
cout << "Comprimento dos lados : " << figura2.getLado() << endl;
cout << "Soma dos comprimentos dos lados: " << figura2.Perimetro() << endl;
cout << "a area e: "<<figura2.area() <<endl;
cout<<"(q) para sair"<<endl;
cin>>opcao;
}
if(opcao == 'r'){
figura3.setNome("Rectangulo");
figura3.setLados(6,3,6,3);
cout << "Nome : " << figura3.getNome() << endl;
cout << "Comprimento do lado 1: " << figura3.getLado1() << endl;
cout << "Largura do lado 2: " << figura3.getLado2() << endl;
cout << "Comprimento da lado 3: " << figura3.getComprimento() << endl;
cout << "Largura do lado 4: " << figura3.getLargura() << endl;
cout << "Soma dos comprimentos dos lados: " << figura3.Perimetro() << endl;
cout << "a area e: "<< figura3.area() <<endl;
cout<<"(q) para sair"<<endl;
cin>>opcao;
}
}while(opcao != 'q');
return 0;
}
Para compilar:
g++ -Wall menu.cpp Poligono.cpp Quadrado.cpp Triangulo.cpp Rectangulo.cpp -o p
./p
No programa
- Sao criados 7 novos programas e substituidos 1 (main.cpp por menu.cpp)
- Nos programas criados sao feitas novas classes-derivadas do Poligono entre elas Triangulo.h/Triangulo.cpp
- Sao mostrados nos programas os lados e criadas areas e perimetros
- Depois no menu é criado um char opcao; essa opcao serve para mostrar na consola uma escolha a ser feita pelo utilizador (r)/(x)/(t) e um para fechar(q).
Para finalizar criamos um diagrama de classes deste programa feito no Umbrello UML Modeller:

0 comentários:
Enviar um comentário