Jump to content
Sign in to follow this  
esec.rom

Duvida

Recommended Posts

esec.rom

boas,

alguém me pode explicar o que e entidades abstractas e estáticas

Share this post


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

Edited by HappyHippyHippo
  • Vote 1

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

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
Sign in to follow this  

×
×
  • Create New...

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.