Dúvida objetos C++

O professor está explicando Orientação a Objetos na faculdade usando a linguagem C++.
Em Java todos os métodos ficam dentro da classe, porém no C++ o professor tem explicado da segunda maneira, com os métodos “fora” do class.

Gostaria de saber qual a diferença entre essas duas abordagens? Qual seria a mais correta? Tem algum link que explique essas diferenças (não sei qual o termo correto para procurar).

Códigos:

Calculadora.h

class Calculadora
{

    public:
        double somar(double a, double b)
        {
            return a + b;
        }

};

Calculadora2.h

[code]
class Calculadora2
{

public:
    double somar(double a, double b);

};

double Calculadora2::somar(double a, double b)
{
return a + b;
}[/code]

Estou estudando C++ agora, então se eu falar besteira, me corrijam.

O normal em C++ é declarar uma classe, suas funções (chamadas de métodos em Java) e membros no cabeçalho (.h) e então implementá-los em um arquivo de código fonte (.cpp).
Quando você implementa (define) os métodos dentro do cabeçalho, o compilador vai (se ele achar necessário) fazer o inlining dessas funções aonde você os utilizar. O compilador faz isso com funções pequenas, mas vai que ele decide fazer para todas as funções. Vc teria então uma cópia de cada função aonda ele for utilizada.

[]'s

Geralmente a abordagem do Java será melhor do que o C++. Como o Java é uma linguagem que surgiu muitos anos depois, e com a sintaxe baseada no C++, aproveitaram para revisar muita coisa. Tiraram boa parte das armadilhas da linguagem, facilitaram a definição e importação de pacotes externos, simplificaram a sintaxe…

Entretanto, isso não significa que em C++ você deva sair declarando classes como faz em Java (isso é possível). Cada linguagem tem seu próprio conjunto de boas práticas, aprenda-as e respeite-as.

Em C++, também é importante entender que declaração e definição são duas coisas distintas:
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=188
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=238

@davidbuzatto

Teria então um Calculadora.h só com as definições (acho que é esse o nome - como se fossem métodos abstratos no Java). E então um Calculadora.cpp que implementa essas definições do Calculadora.h?

Se eu precisar utilizar esse objeto calculadora na aplicação incluo o cpp que tem as implementações? É isso? Ou incluo o .h e toda vez que usar o objeto teria que implementar a função (nesse caso não faz muito sentido)?

@ViniGodoy

Com certeza, quero programar em C++ como C++ e não como se fosse em Java (apesar que isso em um primeiro momento é complicado rsrs). Irei procurar sobre boas práticas com a linguagem C++. Qualquer dúvida volto a perguntar.

Valeu pelos links.