Ir ao conteúdo

Contrutor Padrão (dúvida conceitual)


N0vato

Posts recomendados

Postado

Olá gente, bom, eu estava estudando uma parte do livro C++ Como Programar (5ª edição), para quem tem o livro é na página 68,capítulo 3, para quem não tem, o trecho que gerou a confusão pra mim é o seguinte: "O C++ requer uma chamada de construtor para cada objeto criado, o que ajuda a assegurar que o objeto é inicializado adequadamente antes de ser utilizado em um programa - a chamada de construtor ocorre implicitamente quando o objeto é criado. Em qualquer classe que não inclua um construtor explicitamente, o compilador fornece um construtor-padrão - isto é, um construtor sem parâmetros. Por exemplo, quando a linha 46 da Figura 3.5 cria um objeto GradeBook, o construtor-padrão é chamado, porque a declaração de myGradeBook não especifica nenhum argumento de construtor. O construtor-padrão fornecido pelo compilador cria um objeto GradeBook sem fornecer nenhum valor inicial para os membros de dados do objeto. [Nota: Para os membros de dados que são objetos de outras classes, o construtor-padrâo chama o construtor-padrão de cada membro de dados para assegurar que o membro de dados seja inicializado de maneira adequada. De fato, essa é a razão pela qual o membro de dados string courseName (na Figura 3.5) foi inicializado como uma string vazia - o construtor-padrâo da classe string configura o valor da string como a string vazia. ...]". Por isso, dúvida se resume as partes amarela e vermelha, a amarela diz que o construtor-padrão não forneceu nenhum inicial para o membro de dados, mas pelo que eu tinha lido até então a função do contrutor-padrão é justamente a de inicializar os membros de dados de uma classe, com valores consistentes e adequados,já a parte vermelha fala que o construtor-padrão de uma classe chama os construtores-padrão de cada membro de dados, o que pra mim, deu a entender que em tipos básicos como o int e o float (se fosse o caso deles serem o tipo de um membro de dados de uma classe qualquer) teriam seus construtores-padrão chamados pelo construtor-padrão da classe a qual pertencem. Não sei se eu consegui me fazer entender, porque além de eu mesmo estar confuso com essa questão a própria tentativa de explicar isso é um pouco confusa.

De qaulquer forma, obrigado ae pela antenção gente.

Postado

olhe esta classe:

[COLOR="blue"]class[/COLOR] Pessoa
[color="navy"]{[/color]
[color="blue"]public[/color][color="navy"]:[/color]
[color="blue"]int[/color] Anos[color="navy"];[/color]
[color="navy"]};[/color]

o compilador cria um construtor padrão para ela, mas ele é criado assim:

[color="blue"]class[/color] Pessoa
[color="navy"]{[/color]
[color="blue"]public[/color][color="navy"]:[/color]
[color="blue"]int[/color] Anos[color="navy"];[/color]
Pessoa[color="navy"]()[/color]
[color="navy"]{ }[/color][color="green"]// isso inicia a classe, mas não dá um valor para Anos;[/color]
[color="navy"]};[/color]

Somente você pode definir o valor de Anos pelo construtor

[color="blue"]class[/color] Pessoa[COLOR="Navy"]()
{[/COLOR]
[COLOR="Blue"]public[/COLOR][COLOR="Navy"]:[/COLOR]
[COLOR="Blue"]int[/COLOR] Anos[COLOR="Navy"];[/COLOR]
Pessoa[COLOR="navy"]()
{[/COLOR]
Anos [COLOR="navy"]= [/COLOR][COLOR="DeepSkyBlue"]0[/COLOR][COLOR="Navy"];[/COLOR][COLOR="Green"]// só o programador pode fazer isso[/COLOR]
[COLOR="Navy"]}
};[/COLOR]

Para os membros de outra classe:

[COLOR="Blue"]class[/COLOR] Base
[COLOR="Navy"]{[/COLOR]
[COLOR="Blue"]public[/COLOR][COLOR="Navy"]:[/COLOR]
[COLOR="Blue"]int[/COLOR] a[COLOR="Navy"];[/COLOR]
Base[COLOR="navy"]()
{[/COLOR]
a [COLOR="navy"]=[/COLOR] [COLOR="deepskyblue"]5[/COLOR][COLOR="Navy"];[/COLOR]
[COLOR="navy"]}
};[/COLOR]

[COLOR="Blue"]class[/COLOR] Derivada [COLOR="Navy"]:[/COLOR] Base
[COLOR="navy"]{[/COLOR]
[COLOR="Blue"]public[/COLOR][COLOR="Navy"]:[/COLOR]
[COLOR="Blue"]int[/COLOR] b[COLOR="Navy"];[/COLOR]
Derivada[COLOR="navy"]()
{[/COLOR]
b [COLOR="navy"]=[/COLOR] a[COLOR="navy"]+[/COLOR][COLOR="deepskyblue"]5[/COLOR]; [COLOR="Green"]// aqui b conteria 10;[/COLOR]
[COLOR="Navy"] }
};[/COLOR]

Primeiro é chamado o construtor das classes base, depois o construtor das derivadas, assim, como a pertence a classe pai, ele é iniciado por ela, e b é iniciado pela derivada, é meio complicado de ver construtores somente na teoria, você tem que usar eles programando, foi assim que aprendi. ;)

Postado

Obrigadão pelas explicações Leonardo,entendi, então no caso da classe Pessoa nenhum valor seria atribuído a Anos (imagino que ficaria com um valor lixo esse membro de dados)...é que mudei da Matemática para a Informática, por isso acho que ainda não me acostumei com a prática direta, ainda tenho a mania de sempre buscar primeiro a teoria...

Postado

Exatamente N0vato, quando declaramos

[COLOR="Blue"]int[/COLOR] Numero; 

Numero foi apenas declarado, ele contém -858993460 como valor (pelo menos no meu compilador), para indicar que não foi inciado

Sobre sua mania, continue assim... não está errado em buscar a teoria primeiro, o importante é ter teoria e prática sempre juntos :lol:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...