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

bushin

Listas de inicialização

7 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é vdd já nao me lembrava. Que era

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

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

0

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