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

Gurzi

[C++] Ajuda aqui numas respostas

5 mensagens neste tópico

Preciso aqui de uns exclarecimentos que me estam a tramar visto que não consigo perceber estas perguntas .

1 - O que é uma função membro e como ela difere de uma função não membro ?? (  RESOLVIDO )

2- O que acontece caso se esqueça de colocar o const numa função de acess ? O que acontece se acidentalmente se coloca um const numa função modificadora ? ( RESOLVIDO )

:confused:

Thnks guys ;)

ps : o tema das perguntas é classes e objectos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a aprender as heranças em c++ mas está complicado..

Devolve-me este erro:

Alguem sabe porquê ?

ti.cpp: In constructor 'PEmpregado::PEmpregado(int, std::string)':

ti.cpp:72: error: no matching function for call to 'Pessoa::Pessoa()'

ti.cpp:26: note: candidates are: Pessoa::Pessoa(std::string, int)

ti.cpp:4: note:                Pessoa::Pessoa(const Pessoa&)

CODIGO


#include <iostream>
using namespace std;

class Pessoa{

public:
    
    Pessoa();
    Pessoa(string p_nome, int p_idade);
    
    // Inline Declarations
    string getNome() const
    {
     return nome;
     }
        
    int getIdade() const{
        return idade;
    }
    
protected:
    string nome;
    int idade;
};

// Constructor
Pessoa::Pessoa(string p_nome, int p_idade)
{
    nome = p_nome;
    idade = p_idade;
}
/* =========================================
                CLASS EMPREGADO
   ========================================= */
class Empregado{

public:   
    Empregado();
    Empregado(int numero);
    int getNumero() const;
    void setNumero(int);
    
  protected:
  
  int numEmpregado;
    
};
//Constructor
Empregado::Empregado(int numero)
{
    numEmpregado =  numero;
}  


int Empregado::getNumero() const{
return numEmpregado;
}

void Empregado::setNumero(int num){
    numEmpregado  = num;
}

/* =========================================
                CLASS PEmpregado
   ========================================= */
   
class PEmpregado: public Pessoa {
    public:
        PEmpregado();
        PEmpregado(int xpto, string gr);

};

PEmpregado::PEmpregado(int xpto, string gr)
{
    idade = xpto;
    nome = gr;
}

int main()
{
    Pessoa Tiago("Gurzi", 19);
    Empregado Joao(170);
    PEmpregado Joana(20,"Joana");
    cout << Joana.getNome() << "\n\n";
    
    cout << Joao.getNumero() << "\n\n\n\n.";
    cout << Tiago.getIdade() << "\n\n .";
    return 0;
}

    

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A tua class PEmpregado herda da class Pessoa, quando crias um objecto PEmpregado, vai primeiro chamar o construtor PEmpregado e depois chamará o da super class caso não o tenhas feito explicitamente. E quando o faz chama o constructor por defeito, sem argumentos. Acontece que declaraste-o mas não o implementastes. Em vez de

Pessoa();

mete

Pessoa(){}

e deverá funcionar sem problemas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1 - O que é uma função membro e como ela difere de uma função não membro ?? ( NAO RESOLVIDO )

Hmm função membro, acho que tas-te a referir aos métodos, as funções dentro de classes não é?

De qualquer forma não vejo outra coisa a não ser isso portanto:

Funções que pertencem as classes só podem ser invocadas quando existe uma instância do próprio objecto.

Funções "soltas" são uma especie de funções globais. Podem ser chamas sem mais nem menos (como simples funções em C). Funções definidas como "static" dentro de classes também são assim, dado que não precisam de nenhuma instancia da class para poderem ser chamadas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1 - O que é uma função membro e como ela difere de uma função não membro ?? ( NAO RESOLVIDO )

Hmm função membro, acho que tas-te a referir aos métodos, as funções dentro de classes não é?

De qualquer forma não vejo outra coisa a não ser isso portanto:

Funções que pertencem as classes só podem ser invocadas quando existe uma instância do próprio objecto.

Funções "soltas" são uma especie de funções globais. Podem ser chamas sem mais nem menos (como simples funções em C). Funções definidas como "static" dentro de classes também são assim, dado que não precisam de nenhuma instancia da class para poderem ser chamadas.

Pois, foi o que eu pensei, é que na verdade o mérito incrível das perguntas num português engraçado não são minhas, foi um professor meu, mas não percebi muito bem essas expressões, para mim funções de um objecto são métodos e funções são todas aquelas que não pertencem a um objecto que retornam um valor.

Em relação ao programa, já está a bombar, era mesmo isso, esquecime de por os {} nos constructores default..

Obrigado mesmo, um abraço  ;)

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