Jump to content
mistic

Retornar um objecto nulo

Recommended Posts

mistic

Olá boa tarde,

Estou com a seguinte dúvida.

Estou a desenvolver um jogo em c++ e realizei a pouco uma função de pesquisa que não retorna void mas sim uma class que eu criei que se chama Player.

Essa função é constituída por dois ciclos for e se encontrar em algum caso o pretendido retorna esse objecto, o caso é que ela também pode nao encontrar e eu nao sei o que retornar, porque se nao o fizer o compilador da warning.

Atentamente

Share this post


Link to post
Share on other sites
xtrm0

Podes criar uma variavel na classe player, que seja uma bool e se chame null.

Se o player não existir, retorna um player novo, com a variavel null em verdadeiro.


<Signature goes here>

Share this post


Link to post
Share on other sites
blackburn69

Ocorrem-me 2 formas "limpas" de fazer o que pretendes:

Player player = null;

for() {
    for() {
        if(achei)
            player = resultado da pesquisa;
    }
}

return player; //Se no for não encontrou nada, player ainda vai ser null.

for() {
    for() {
        if(achei)
            return player;
    }
}

return null; //Se no for já encontrou o player, não vai sequer chegar aqui.
                  // Caso não ache nada, vai chegar aqui e retornar null;

Depois tens é de ter cuidado de ver o resultado da chamada da função antes de tentares aceder ao objecto, ou seja,

Player p = pesquisa(whatever);

if(p != null)
   //o que queres fazer
   p.coisas(); //aqui é seguro fazer isto porque já sabemos que p não é null.
else //tratamento do erro.

Repara que se não verificasses isto e fizesses logo p.coisas(), quando p fosse null ia dar uma excepção.

Share this post


Link to post
Share on other sites
mistic

Obrigado pelas respostas.

Blackburn nao da para fazer como dizes.

O compilador nao aceita que eu faça Player player = NULL; diz que nao sabe converter um inteiro para Player

Share this post


Link to post
Share on other sites
KTachyon

Sem ponteiro? Não podes definir o valor de um objecto a null. O que tens que definir é o endereço do objecto a null. Se não é normal que ele não saiba converter um inteiro para um Player (visto que null é zero).


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
mistic

eu coloquei isto

Player *p = NULL;

.....

return *p;

Compilou, resta-me testar.

Share this post


Link to post
Share on other sites
blackburn69

Sem ponteiro? Não podes definir o valor de um objecto a null. O que tens que definir é o endereço do objecto a null. Se não é normal que ele não saiba converter um inteiro para um Player (visto que null é zero).

Sim exacto, escapou-me esse detalhe. O que eu fiz também foi mais em pseudo-código. Não tive muita atenção a esse detalhe (que em Java não era preciso). :P

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.