Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

esec.rom

Duvida

Mensagens Recomendadas

HappyHippyHippo    1140
HappyHippyHippo

classes/entidades abstractas :

são definições de classes/entidades das quais a sua instanciação se encontra impossibilitada por uma das duas seguintes razões :

- o construtor da classe não +e publico

- existência de alguma método pure virtual

razões porque estas duas ocorrências impossibilita a instanciação :

- sem construtor público, o compilador não se encontra habilitado a chamar essa função no momento de criação do classe/objecto/entidade.

exemplo:

class A
{
protected:
 A() // <-- construtor não-público
 {
 }
};

- a existência de métodos pure virtual apresenta problemas de instanciação da classe porque o(s) método(s) não se encontram definidos, e sem essa definição, é impossível chamar-los. logo, qualquer classe que declara esse tipo de métodos ou herda de uma classe mãe, encontrasse automaticamente no estado de abstracta.

exemplo:

class A
{
 int foo() = 0; // <-- função virtual, classe abstracta
};

class B : protected A // <-- herda uma função virtual e não a define, classe abstracta
{
public:
 B() {};
};

class C : protected B
{
 int foo() { return 0; }; // <-- definição da função virtual, classe instanciável
}

---------------

entidades estáticas são variável/funções/métodos de classes/parâmetros de classes que se encontram definidas numa zona muito específica da memória e não requerem uma instância de uma classe para serem chamadas.

o conceito de estático para as variáveis e funções é um bocado complicado sendo o melhor a procurar na net por "C static keyword" (sim C, isso vem do C).

no entanto, no que toca a classes, é mais fácil de explicar. como disse acima, os parâmetros e métodos das classes que se encontram definidas como estáticas, não requerem uma instância para serem chamadas.

no entanto, no que toca aos parâmetros das classes, é importante verificar que como não está associado a uma instância da classe, o seu valor é global e persiste durante toda a execução da aplicação (persistir não que dizer que não pode ser alterado, simplesmente que não é apagado).

existe também o pormenor que nas funções estáticas, pela mesma razão anterior, não podes usar o this por não pertencer a nenhuma classe !!

exemplo:

class A
{
public:
 int i;
 static int j;

 int foo();
 static int bar();
}

int main()
{
 std::cout << A::i << std::end; // i não é estático, ERRO
 std::cout << A::j << std::end; // i é estático, OK

 std::cout << A::foor() << std::end; // foo() não é estático, ERRO
 std::cout << A::bar() << std::end; // bar() é estático, OK

 return 0;
}

-----

edit : correcção dos nomes das classes no exemplo de herança de métodos virtuais

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link 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.