Ir para o conteúdo
soulksyoux

Dúvida sobre passar objectos para uma função

Mensagens Recomendadas

soulksyoux

http://ideone.com/jPFrOv

http://ideone.com/EIkL78

http://ideone.com/iMz0ZX

O enunciado do problema que estou a estudar é o seguinte:

9.7 (Enhancing Class Time) Modify the Time class of Figs. 9.8–9.9 to include a tick member

function that increments the time stored in a Time object by one second. Write a program that tests

the tick member function in a loop that prints the time in standard format during each iteration

of the loop to illustrate that the tick member function works correctly. Be sure to test the following

cases:

a) Incrementing into the next minute.

b) Incrementing into the next hour.

c) Incrementing into the next day (i.e., 11:59:59 PM to 12:00:00 AM).

Qual seria a melhor maneira de passar o objecto Time para a função tick?

Eu estava a optar por passar através de um apontador, mas não sei se é a forma mais correta.

Time.h:

void tick(Time *);

Time.cpp:

void Time::tick(Time * T)
{
T->setSecond(T->getSecond()+1);
}

main.cpp:

Time t1(12,4,30);
for(int i=0;i<20;i++)
{
t1.tick(&t1);
}
t1.printStandard();

Isto está correto?

Obrigado e cumprimentos.

Editado por pmg
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers

Se a ideia é apenas alterar o tempo do objecto Time que estás a usar, não precisas do parâmetro.

Time.h:

void tick();

Time.cpp:

void Time::tick()
{
 // até podes usar o atributo directamente nesta função em vez de usar o set e get
 setSecond(getSecond()+1); 
 // falta verificar a mudança de minuto, hora e dia.
}


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
soulksyoux

Mas acho que a função Tick é uma função de classe.

A minha leitura foi que a função Tick não pertence a cada um dos objectos, mas é uma função da classe que pode ser invocada para um objecto em particular.

Dai ter feito da maneira que fiz.

Mas a função seria static.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers
Modify the Time class of Figs. 9.8–9.9 to include a tick member function

uma member function é uma função normal que acede aos atributos do objecto. no enunciado não há nada que sugira uma função estática, pelo contrário.


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
soulksyoux

Mas então por essa lógica cada objecto Time criado tem uma função tick?

E já agora, se tick fosse uma função estática, a maneira como eu fiz estaria bem?

Ou haveria forma melhor para o fazer?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers

Pela forma como escreves, parece que não compreendeste bem como as classes e os objectos funcionam.

Cada objecto tem os seus próprios atributos, mas a implementação das funções é partilhada por todos. Assim, dizer que cada objecto tem uma função tick não me soa muito bem - a classe é que tem essa função definida. Se queres uma função que actua apenas sobre os atributos de um objecto, esta não deve ser estática.

O código que mostraste funciona, mas penso que seria melhor fazer assim:

for(int i=0;i<20;i++)
{
 // Visto que estás a usar uma função estática, é melhor assinalar isso mesmo usando Time::
 Time::tick(&t1);
}

Outra forma seria fazer uma passagem por referência

Time.h:

void tick(Time&);

Time.cpp:

void Time::tick(Time& t)
{
 t.setSecond(t.getSecond()+1);
}

main.cpp:

Time t1(12,4,30);
for(int i=0;i<20;i++)
{
 Time::tick(t1);
}
t1.printStandard();


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.