Array
(
)

Forçar implementação de função abstrata

Rodc
   - 06 jun 2008

Existe no C++ alguma forma de declarar em uma classe base uma função abstrata e fazer com que a classe que herdar a classe base seja obrigada a implementar a função abstrata?


Massuda
   - 06 jun 2008

A maioria (acho que todos) dos compiladores não irá permitir usar uma classe que contenha métodos abstratos, dá erro de compilação.

Por exemplo, usando o BCC 5.5 para compilar isto...#Código

class Teste 
{
public:
virtual void Foo(void) = 0;
};

void main(void) {

Teste teste;
teste.Foo();
}
...dá os seguintes erros...
Citação:
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
teste.cpp:
Error E2352 teste.cpp 11: Cannot create instance of abstract class ´Teste´ in function main()
Error E2353 teste.cpp 11: Class ´Teste´ is abstract because of ´Teste::Foo(void) = 0´ in function main()
*** 2 errors in Compile ***



Rodc
   - 06 jun 2008

Pois é realmente fazendo a classe desta forma ele não deixa.
Mas eu estou usando um formulário do Repository no C++ Builder. E neste caso ele deixa implementar o form filho sem implementar as funções abstratas do pai. Talvês deva ter alguma peculiaridade por ter uma interface visual.

Mas valew pela ajuda...


Massuda
   - 06 jun 2008


Citação:
...eu estou usando um formulário do Repository no C++ Builder. E neste caso ele deixa implementar o form filho sem implementar as funções abstratas do pai...
Talvez seja isso... sei que o compilador do C++Builder tem algumas modificações para permitir integrar com a VCL (parte visual) que é escrita em Object Pascal/Delphi.

Em Object Pascal, não dá erro de compilação criar um objeto que contem métodos abstratos, mas ocorre erro em tempo de execução se tentar usar algum dos métodos abstratos (os métodos não-abstratos funcionam normalmente).