• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

andronikus

[C++] Dúvida: Herança Múltipla (Resolvido)

8 mensagens neste tópico

Boas,

Estou aqui bloqueado.... Precisava que alguem me desse uma ajudinha

Então é assim... Criei uma classe CPessoa (contem um campo para o nome e outro para o apelido) e uma Classe CData (contém o campo dia, mes e ano).

Agora quero criar uma classe CTrabalhador.... Este deve ter informação acerca do nome e apelido (tem que ser uma classe derivada de CPessoa) e tb tem que conter a data de inicio de actividade da empresa (tem que ser classe derivada de CData(?)).

Aqui reside a minha duvida... Aparentemente a classe CTrabalhador é uma classe derivada de duas classes bases (?) Como é que posso resolver isto?

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso não haver problema nenhum, mas não sei muito bem ao que te referes quando falas em classes derivadas.

Supostamente dá para criares um objecto da classe CPessoa e da classe CData dentro do objecto CTrabalhador.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como C++ permite herança múltipla podias ter a classe CTrabalhador como subclasse das classes CPessoas e CData, mas será que isso faz sentido?

não me parece, Trabalhador é um caso particular de uma pessoa (um trabalhador é uma pessoa), como tal deve ser subclasse de Pessoas, mas Trabalhador não é um caso particular de Data (um trabalhador não é uma data), como tal não faz qualquer sentido (pelo menos com os dados que destes do problema) que Trabalhador seja subclasse de Data. a data será um atributo de um trabalhador (como nome e apelido são atributos de pessoa).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu estou a utilizar o visual C++...

Quando quero introduzir uma classe que é derivada de outra (por exemplo na Classe CTrabalhador vou precisar de um objecto do tipo CPessoa)

A declaração fica deste tipo....

class CTrabalhador :
public CPessoa
{
public:
CTrabalhador(void);
public:
virtual ~CTrabalhador(void);
};

Mas a classe CTrabalhador tb precisa de um ojecto do tipo CData... Agora a minha duvida é como é que posso fazer isso... tipo esta declaração está correcta?

class CTrabalhador :
public CPessoa, public CData
{
public:
CTrabalhador(void);
public:
virtual ~CTrabalhador(void);
};

definir public CPessoa, public CData ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como o Rui Carlos disse, e bem, a classe trabalhador é um caso particular da classe Pessoa, ou seja, trabalhador extende pessoa. A classe data são atributos para definir certa informação da pessoa ou trabalhador, como a data de nascimento, data de inicio de actividade.....

class Pessoa
{
private:
char * nome ;
Data dtnasc ;
int alt ;

public:
Pessoa();
Pessoa(char * n,Data d,int al);
}

Pessoa():Data()
{

}
Pessoa (char * n,Data d,int al):Data(d)
{
    ......
}

class Trabalhador: public Pessoa
{
private:
char * emprego ;
Data entrada ;

public:
Trabalhador();
Trabalhador(Pessoa p,Data d, char * emp);
}

Trabalhador():Pessoa():Data()
{

}
Trabalhador (char * emp):Pessoa(p):Data(d)
{
    ......
}

Se cometi algum erro por favor corrigam. Mas penso que é assim...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado Rui Carlos.... Acendeste me a lampada.... :biggrin:

Acho que a questão está resolvida.

Só queria deixar dois reparos:

  • O título, não deve ser só "dúvida c++". O título deve indicar a questão, assim um leitor do fórum não precisa de abrir um à um para ver o que fala cada tópico.
  • O outro reparo é o local do tópico, existe uma sub-secção de dúvidas dentro da secção C++ para estas questões.

Da próxima já sabes  :Pandronikus

Cumpr. bk@ero  :ipool:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora