Herança P.O.O.

1. Herança P.O.O.

Augusto
LinuxMH

(usa BackTrack)

Enviado em 30/06/2013 - 21:32h

Bom, estou com uma dúvida em Herança
#include <iostream>
using namespace std;
class Nome{
string nome;
public:
void setNome(string nome);
string getNome();
void idade(int i);
};
class Sobre : public Nome{
private :
string sobre;
public:
void setSobre(string sobre);
string getSobre();
void exibir();
};
main()
{
Sobre objeto;
Nome objeto1;
cout <<"Classe NOME : "<<endl;
objeto1.setNome("Maria");
cout <<objeto1.getNome()<<endl;
objeto1.idade(14);
cout <<"\n\n Classe Sobre: "<<endl;
objeto.setSobre("Fernanda");
cout <<objeto.getSobre()<<endl;
cout <<"\nClasse Herdada: "<<endl;
objeto.exibir();

}
void Nome::setNome(string nome){
this->nome=nome;
}
string Nome::getNome(){
return nome;
}
void Nome::idade(int i){
cout <<"Idade: "<<i<<endl;
}
void Sobre::setSobre(string sobre){
this->sobre=sobre;
}
string Sobre::getSobre(){
return sobre;
}
void Sobre::exibir(){
cout <<"Nome Herdado: "<<getNome()<<" ";
cout <<getSobre()<<endl;
}


tipo eu sei que ele herda as funções membro, mais ele não herda o conteúdo da função membro não ?
exemplo: Eu queria que a função Exibir, exibi-se Maria Fernanda, e não Fernanda, eu consegui fazendo isso, passando novos paramentros para class Sobre

Sobre cc;
cc.setNome("Maria");
cc.setSobre("Fernanda");

Ai ele imprimi Maria Fernanda, mais tem outro jeito de imprimir Maria Fernanda sem passar novos Parâmetro ?


  


2. Re: Herança P.O.O.

Paulo
paulo1205

(usa Ubuntu)

Enviado em 01/07/2013 - 03:23h

Você está trabalhando com dois objetos diferentes. Saiu impresso somente "Fernanda" para objeto.exibir() porque você nunca chamou objeto.setNome(), de modo que o valor do atributo objeto.nome ficou com o valor default do seu tipo std::string, que é o de uma string vazia.

Reiterando, a hierarquia de classes não tem qualquer implicação de que objetos distintos -- i.e. que ocupam posições diferentes na memória -- terão valores comuns de seus campos.

Se você quiser que uma classe tenha um atributo com um valor que seja comum a todos os objetos dessa classe (e, consequentemente, também de classes derivadas) pode considerar tornar tal atributo da classe -- e não mais de cada objeto --, por meio da declaração desse atributo com a palavra-chave static. Esse atributo compartilhado ficará armazenado numa outra região da memória, distinta daquela ocupada por cada um dos objetos dessa classe, e eventuais referências a esse atributo através de cada objeto farão referência a essa posição de memória externa.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts