chamar destrutor da classe base.
06/05/2009
0
Numa classe que eu criei descendente de outra que já existia eu preciso sobrescrever um metodo. Nesse metodo eu executo algumas instuções e no final chamo o metodo da classe base, para não copiar codigo. Como eu faço para chamar o metodo da classe base?
No delphi eu faço inherited metodo
no C# eu faço base.metodo()
no java é super.metodo e no vb tambem.
e no C++?
da certo de o metodo for o destrutor da classe? pergunto isso porque no destrutor da minha classe eu tenho que liberar da memoria alguns objetos privados desta classe, mas depois preciso chamar o destrutor da classe mae, para que seja executado o memso codigo e liberadas as coisas das quais não tenho conhecimento.
se fosse delphi eu fazia:
destructor tminhaclasse.destroy
begin
objetoaki.free;
inherited;
end;
mas como eu faço isso no c++ builder? funciona em outros compiladores c++?
Vitor Rubio
Posts
11/05/2009
Vitor Rubio
vou testar e já posto o resultado. muito obrigado!
11/05/2009
Rodc
Opâ... não existe a palavra chave ´base´, acho que me expressei mal. ´base´ é o nome da classe ancestora. Exemplo:
class TmeuBotao : public(TButton) { public: Click(); // sobrescrita de função da classe base }
TmeuBotao::Click() { TButton::Click(); }
11/05/2009
Vitor Rubio
Só que no caso, o metodo que eu quero sobrescrever é o destructor, e a classe base é, eu acho, TObject.
eu posso chamar, dentro do meu destructor novo
Tobject::~Tobject
ou
tobject::destroy?
no c++ builder as classes são mesmo todas descendentes de Tobject como no delphi?
pergunto isso porque não quero causar memory leaks. Se a classe base criasse um TstringList privado eu gostaria que esse stringlist fosse destruido tanto no destructor da minha classe como no destructor de seus descendentes.
11/05/2009
Vitor Rubio
com TObject::Free dá stack overflow. parece que cria uma chamada recursiva a free.
parece que eu não devo fazer isso no destructor Tminhaclasse:~Tminhaclasse
né?
tenho que criar um metodo destroy? é isso? ou free?
11/05/2009
Rodc
A função __fastcall TmeuObject() e __fastcall ~TmeuObject() seriam equivalentes ao Initialization e Finalization das classes do Delphi, que normalente só são usadas nos componentes.
A função de create e destroy do C++ não é bem uma função, tanto que não tem retorno. Nelas você não precisa chamar o destroy nem o create da classe base porque a VCL já faz isto automaticamente.
Como teste, uma classe descendente da outra e teste com BreakPoints como ele executa as funções de create e destroy de todas as classes bases automaticamente.
11/05/2009
Vitor Rubio
não preciso me preocupar com memory leaks nesse caso?
Valew! Obrigado pela ajuda.
11/05/2009
Rodc
Clique aqui para fazer login e interagir na Comunidade :)