Ola GUJ,
Gente, porque em java eu tenho que fazer assim :
File file = new File();
e no c++ se faz assim :
File file;
??
E por que os Deuses separaram em arquivo .h e .cpp, pesquisei e pra mim nao faz sentido… Em java nao tem nada disso >.<
Ola GUJ,
Gente, porque em java eu tenho que fazer assim :
File file = new File();
e no c++ se faz assim :
File file;
??
E por que os Deuses separaram em arquivo .h e .cpp, pesquisei e pra mim nao faz sentido… Em java nao tem nada disso >.<
Não sou expert em C++ e logo melhorarão o que eu responder, mas vamos lá.
Esse tipo de declaração em C++ indica uma instância que fica na pilha, dentro do chamada de uma função.
Essa variável só vai existir durante a execução do método. Quando ele for desempilhado, ela vai ser desalocada.
Outro ponto, é que esta variável marca realmente onde está o objeto, não é uma referência a ele igual em Java (neste caso).
Em Java, o “new File();” cria uma instância e retorna a referência dela na memória para que então a variável “file” receba essa referência, ou seja, a variável “file” não tem como valor o objeto, mas sim uma referência a ele.
O correspondente do seu código Java em C++ seria:
Note que aqui é diferente, pois o new vai alocar espaço para o novo objeto, instanciá-lo e então o ponteiro para este objeto será retornado, atribuindo assim à varoável “*file”.
Outro ponto importante é que se você não desalocar esse objeto manualmente, ele continuará vivo na memória, causando vazamentos. Em Java, os objetos que perdem as referências (variáveis que “apontam” para eles) são marcados para a coleta de lixo, enquanto que em C++ isso não existe. Você tem que obrigatoriamente detruir o objeto da memória, invocando o destrutor da classe dessa forma:
Em Java, tudo o que não for primitivo, na verdade é um tipo de ponteiro, enquanto que em C++ você precisa definir isso explicitamente.
Quanto a outra pergunta:
https://www.google.com.br/search?q=difference+between+.h+and+.cpp
https://www.google.com.br/search?q=c%2B%2B+declaration+or+definition
[]'s
No C++, existe a distinção clara entre definição e declaração. A definição é o que fica no .h e ela pode ser associada a qualquer binário, seja o recém compilado, ou a de uma lib estática. Com a definição, o compilador pode fazer checagem de tipos, validação de tamanhos de dados e as IDEs podem fazer code completion.
Lembre-se que em C++ não existe reflexão. Portanto, sem a definição, seria impossível esses recursos existirem.
O que o Java faz é gravar a informação de definição junto as classes. Isso dá a vantagem de permitir reflexão, mas tem como desvantagens facilitar a descompilação do código e reduzir o número de otimizações possíveis.
Logicamente, muita coisa em Java será mais simples que do é em C++. Pelos seguintes motivos:
a) O Java foi especificamente feito para ser mais fácil de programar do que o C++;
b) O Java foi criado numa época em que os recursos computacionais eram maiores (permitindo a existência do GC) e…
c) … onde já existiam IDEs. A linguagem já foi projetada para ser amigável para as IDEs;
d) O java não tem como prioridade em seu design performance ou tempo real;
Arquivos .h são arquivos de cabeçalhos estáticos , .cpp é a extensão do projeto .
Cabeçário deve ser uma exposição de cabeças? provavelmente decapitadas…
Acho que você quis dizer cabeçalho.
[quote]
Cabeçário deve ser uma exposição de cabeças? provavelmente decapitadas…
Acho que você quis dizer cabeçalho.[/quote]
Erro… corrigido!!
grato pela ajuda!
Valeu gente, desculpa pela demora pra responder, estava dando mais uma estudada em C++.
Gostei de saber sobre o GC e das diferenças…
Mas se tivesse o .h e o.cpp no java, como que seriam?
Porque no video e na apostila, eles falam de uma coisa, que pra mim nao faz sentido o.o
No .h ficaria parecendo uma interface, com a diferença de que os atributos também seriam declarados:
[code]public class Pessoa {
private String nome;
private int idade;
public Pessoa(String nome, int idade);
public String getNome();
public int getIdade();
}[/code]
E no .cpp ficaria a implementação:
[code]
public Pessoa.Pessoa(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
public String Pessoa.getNome() {
return nome;
}
public int Pessoa.getIdade() {
return idade;
}[/code]
[quote=Andre Lopes]…pra mim nao faz sentido… Em java nao tem nada disso >.<
[/quote]
Será que essa preocupação em achar um paralelo no Java para cada recurso do C++ não está te atrapalhando na hora de aprender ?
Procure estudar a linguagem por si só. Isso não vale só para C++, mas para outras linguagens que for aprender. Java é uma linguagem bastante simples e “certinha”, então provavelmente qualquer linguagem moderna vai ter recursos que estão além daquilo que existe no Java.
Portanto quando estiver estudando, não pense:
"O elemento xxxx equivale ao que no Java?"
Pense:
“Qual a função do elemento xxxx dentro da linguagem yyyy?”

[quote=Andre Lopes]Valeu gente, desculpa pela demora pra responder, estava dando mais uma estudada em C++.
Gostei de saber sobre o GC e das diferenças…
Mas se tivesse o .h e o.cpp no java, como que seriam?
Porque no video e na apostila, eles falam de uma coisa, que pra mim nao faz sentido o.o
[/quote]
O cabeçalho existe porque a definição da função que está no arquivo cpp é compilada e no caso você perde a referência para elas nesse arquivo.
Por exemplo, se você quer usar uma função da kernel32.dll precisa do cabeçalho dela para ter as referências. No java o artefato já contém essas informações e você pode recuperá-las com a reflexão como o pessoal falou aí.
É a mesma coisa que aconteceu quando fui aprender alemão.
Embora o alemão e o inglês tenham um certo parentesco, as gramáticas são muito diferentes e é melhor aprender o alemão sem ficar estabelecendo muitas analogias com o inglês.
(Até porque se você for pensar em termos de léxico, o francês é mais parente do inglês que o alemão
)