C++

Agenda

  • Orientação à objetos e Classes em C++
  • Visibilidade de variáveis e funções
  • Sobrecarga de funções
  • Ponteiros vs Referências
  • Exceptions
  • Namespaces
  • STL
  • Templates

Orientação à objetos

Coisas comuns vão em um classe base

Um personagem de um jogo:

  • Pula
  • Chuta
  • Soca

A questão é: alguns personagens chutam e socam de forma diferente.


class Personagem {
	void pular();
	void chutar();
	void socar();
}
						

Herança/Especialização


class Ruy : public Personagem {
    void pular() {
        this.altura_max = 10;
    }
}
						


class Chunli : public Personagem {
    void pular() {
        this.altura_max = 15;
    }
}
						


Personagem player1 = new Ruy();
Peronsagem player2 = new Chunli();
                        


delete player1;
delete player2;
                        

E como fazer caso eu queria executar algo que havia na classe base?


class Chunli : public Personagem {
    void pular() {
        this.altura_max = 15;
        Personagem::pular();
    }
}
                        

E não, mesmo sendo irmãos, a classe Chunli não pode fazer Ryu::pular().

Visibilidade de variáveis e funções

public

Função/variável que está visível para classes filhas e nas instâncias.

Padrão quando não há uma visibilidade definida.


class PublicExample {
	public:
	int a_number;
	void set_a_number(int number_to_set);
	int get_a_number();
}
						

private

Função/variável que está visível apenas para classes filhas.


class PrivateExample {
	private:
	int a_number;

	public:
	void set_a_number(int number_to_set);
	int get_a_number();
}
						

protected

Função/variável é visível apenas dentro da própria classe.


class ProtectedExample {
	protected:
	int a_number;

	public:
	void set_a_number(int number_to_set);
	int get_a_number();
}
						

Sobrecarga de funções


class Example {
    public:
    void set_a_number(int number_to_set);
    void set_a_number(float number_to_set);
    void set_a_number(string number_to_set);
}
                        


class Example {
    public:
    int get_a_number();
    float get_a_number();
    string get_a_number();
}
                        

Ponteiros vs Referências vs Cópias

Cópia


Ryu player();

Arena arena.add_player(player);
                        

Exceptions