herança
:(
Como vi que o tópico sobre herança foi dado como resolvido, resolvi abrir este para abordar um outro aspecto.
Agora veja a nova versão do programa:
Do ponto de vista da programação OO, ele está sem erros. Embora sem erros de compilação e rodando, tenho algumas dúvidas sobre a chamada do construtor na herança. Veja.
#include <iostream>
using namespace std;
class Circulo
{
protected:
double raio;
static const double PI;
private:
double Area;
double Area_Circulo();
public:
Circulo (double r);
void Mostra_Area();
};
class Medidas_Circunferencia : public Circulo
{
private:
double Diametro;
double Diametro_Circunferencia();
public:
Medidas_Circunferencia(double r):Circulo (r){};
void Mostra_Medidas_Circunferencia();
};
Circulo::Circulo(double r)
:Area(0)
{
raio=r;
}
double Circulo::Area_Circulo()
{
cout << "Area area do Circulo." << endl;
Area=(raio*raio)*PI; // Área do Circulo
return (Area);
}
void Circulo::Mostra_Area()
{
Area_Circulo();
cout << Area << endl;
return;
}
double Medidas_Circunferencia::Diametro_Circunferencia()
{
cout << "Diametro da circunferencia:" << endl;
Diametro=2*raio;
return(Diametro);
}
void Medidas_Circunferencia::Mostra_Medidas_Circunferencia()
{
double valor_diametro;
valor_diametro=Diametro_Circunferencia();
cout << valor_diametro << endl;
return;
}
const double Circulo::PI=3.1416; //define a variável no
//escopo global
int main()
{
Medidas_Circunferencia Medidas(15);
Medidas.Mostra_Area();
cout << endl;
Medidas.Mostra_Medidas_Circunferencia();
return 0;
}
Vamos considerar a linha:
Medidas_Circunferencia(double r):Circulo (r){}
É sabido quando se declara um construtor não padrão na clase-base, é preciso este seja chamado juntamente com o construtor da classe-derivada.
Analisando a linha em questão, vemos que r é um atributo de Circulo; então por quê tenho que declarar r no construtor da classe Circunferência, como se tivesse declarando a variável de novo ? ou seja:
Medidas_Circunferencia(double r):
Obrigado
Discussão (20)
Carregando comentários...