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

soulksyoux

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

Recommended Posts

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.

Edited by pmg
GeSHi

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.

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

×

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.