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

Sign in to follow this  
bushin

Listas de inicialização

Recommended Posts

bushin

Em que consistem as listas de inicialização e em que circunstancias devem ser utilizadas?

Das pesquisas que efectuei pelo google obtive esta informação:

  • Inicializar listas permite escolher qual é o construtor que é chamado e os argumentos que o construtor recebe.
  • Se tiver uma referência ou um const, ou se uma das classes utilizadas não tem um construtor default, deve-se usar uma lista de inicialização.

cumprimentos

Share this post


Link to post
Share on other sites
Cypher

Imagina, que tens uma classe herdada, A herda de B, ou seja tods os metodos e atributods de A, sao os de B!

se quizeres fazer o contrutores de omissao por exemplo de A, podes chamar logo os atributos de B.

imagina class pessoa , tens os atributos: nome idade.

A class aluno herda os atributos de Pessoa...

Agora imagina a fazeres o construtor de inicializao de pessoa e de aluno

class Pessoa{
         int idade, numero_fiscal;
//metodos
public: 
       Pessoa () {
           idade=numero_fiscal=0;
       }
};

class Aluno: public Pessoa {
  string turma;
public:
  Aluno():idade=50, numero_fiscal=0{
      turma="B";
  }


};

todos os alunos vao ter 50 anos e o numero fiscal 0, meti estes valores porque so estas a inicializar aluno, depois fazer o contrutor de copia, mas fica a ideia da lista de inicializaçao...

cumps...

Share this post


Link to post
Share on other sites
bushin

Não entendi esta anotação

Aluno():idade

será igual a?:

Aluno(idade=50, numero_fiscal=0){

      turma="B";

}

---

Devem ser utilizadas quando há Herança!? será que me podes explicar melhor  em que circunstancias devem ser utilizadas?, não consegui entender. :confused:

cumprimentos

Share this post


Link to post
Share on other sites
TheDark

Aluno():idade=50, numero_fiscal=0{
    turma="B";
}

Devia ser

Aluno(): idade(50), numero_fiscal(0), turma("B") { }

O que está à frente dos : é a lista de inicialização sobre a qual perguntavas.

Quanto à herança, não é bem assim. A maior vantagem das listas de inicialização são a atribuição de valores na construção. Em vez de construir o objecto e depois atribuir-lhe um valor, é utilizado o contrutor do tipo do objecto para lhe atribuir o valor devido.

Em tipos simples (como os inteiros do exemplo) a diferença não é muito visível, mas nas strings já pode existir diferença.

Imagina que uma string quando é criada tem por omissão 10 caracteres, e queres lá colocar uma string com 20 caracteres.

Se não utilizares uma lista de inicialização, é criado o objecto e alocado espaço para uma string com 10 caracteres, e quando se faz a atribuição do valor tem que ser libertado o espaço alocado e realocado um espaço maior, para depois copiar para lá a string.

Se utilizares a lista de inicialização para inicializar (daí o nome :confused: ) a string, como está no exemplo deste post, é-lhe passada como argumento a string que queres que seja copiada, e o construtor da string sabe logo de quanto espaço necessita, e evita uma um delete e um new.


Desaparecido.

Share this post


Link to post
Share on other sites
Cypher

é vdd já nao me lembrava. Que era

:idade(50) lool em vez de idade=50

tb nao sei se da erro, mas provávelmente...

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  

×

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.