C++

O que é

Uma linguagem que nada mais é do que uma extensão da linguagem C para permitir a orientação a objeto, o que a faz atraente e desejável por muitos, por isso que juntamente com a portabilidade e eficiência aproximadamente 95% dos jogos comerciais são implementados através dessa linguagem.

Características

NameSpaces

O namespace é como se fosse as pastas do sistema operacional, cada uma delas guarda
alguma coisa, no caso do C++ um punhado de classes
Vários arquivos podem ter o mesmo nome, mas cada um deles está em uma pasta diferente.
Você pode ter classes em diferentes bibliotecas que têm nomes iguais, mas namespaces
diferentes. Assim a principal utilidade do namespace é evitar choques de nomes de classes
advindos de lugares diferentes.

Classes

Classes são a evolução de structs do C++. Elas nada mais definem o
esqueleto de alguma coisa, com atributos e MÉTODOS (não mais funções).
Objetos são instanciações dessas classes (atribuição de valores aos atributos de classe).
Eles guardam informação de estado idade, nome, estado, etc… mas também informações
comportamentais (o método pular, imprimir nome completo, somar, etc…) que nada mais em
C funções que alteram os membros da struct, só que muito mais organizado.

Exemplos de classes em C++

// Hello World
#include <iostream>
 
using namespace std;
 
int main(){
    cout << "Hello World";
    return 0;
}
// Soma
#include <iostream>

using namespace std;

int main(){
}

class Homem{
    public:
        void baterPalmas( int velocidade );
        char * getNome();
        void setNovoNome( char * );
        int y;
        int j;
    private:
        Cabeca cabeca;
        int idade;
        int estado;
        char *nome; // pode ser usado string
}

Modificadores de acesso

Private

A idéia do private é restringir o acesso dos atributos (variáveis) que tem este modificar
apenas à própria classe. É responsabilidade da classe alterar seus valores, garantindo
assim segurança e estabilidade.
Imagine que você está utilizando C e queira utilizar uma biblioteca de terceiros que
faz uma função de desenho e você tem o código fonte disponível dela. Você descobriu
que ela tem uma variável XYZ que você não sabe para que serve e decide alterá-la, e,
naturalmente consegue, só que você começa a alterar demais e descobre depois que esta
é uma variável importante usada em trocentos lugares e que não consegue mais fazer o
código coltar ao normal para fazer que tudo funcione. O código fica macarrônico e é muito
estressante consertar a cagada. Para isso que inventaram o private. Private neles :).

definição dos métodos: Para definir um método de uma classe X, você deve pôr o
protótipo em uma das seções: public, protected ou private e após a definição de classe
chamar o método da seguinte madeira:
Tomando como exemplo o método bater palmas do exemplo acima

tipo de retorno Classe::nomeDaFunção( Parâmetro )

void Homem::baterPalmas( int velocidade ){
    loadSoundFromFile( "SoundFile.foo" );
    estado = ALEGRE;     // estado é private só a classe Homem pode alterá-lo
                    // como baterPalmas faz parte da classe Homem,
                    // tudo está OK
}

libs C++ para jogos

Existem muitas bibliotecas em C++ para jogos. Duas bibliotecas simples que podem ser
usadas são a FSML e a Clanlib. Ambas tem vários recursos como rede, GUI e possibilidade
de se usar openGL em conjunto com elas e são livres de plataforma, isto é, você pode usar
o mesmo código e ele compila em qualquer sistema operacional.

Edições

C++ 11
C++ 14
C++ 17
C++ 20
C++ 23

C++11 e C++ 17

C++11 é a versão mais nova do padrão C++, incorporando threads e smart pointers. Houve uma ligeira atualização do C++11 lançada em 2014, o C++14. A próxima revisão do padrão é conhecida como C++17

Gerentes de pacotes

Conan
vcpkg

links

http://www.devmaster.net/articles/intro-to-c++-with-game-dev/part1.php
http://www.tenouk.com/cpluspluscompetitioncontest.html: Torneios de programação (não jogo) para C/C++

c++
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.