Programação C++ Programação C++ Uma linguagem em 3 níveis Programação Orientada a Objetos Predefinição de Parâmetros Redefinição de Operadores Templates STL Uma linguagem em 3 níveis Baixo nível: C++ com Assembly extern int errno; int funcname(int arg1, int *arg2, int arg3) { long __res; __asm__ volatile ("movl $128, %%eax;" // chamada do siostema "movl %1, %%ebx;" // arg1 "movl %2, %%ecx;" // arg2 "movl %3, %%edx;" ;// arg3 "int $0x80;" // requisita permissao ao sistema "movl %%eax, %0" // salva o resultado : "=m" (__res) /* bind %0 */ : "m" (arg1), "m" ((long) arg2), "m" (arg3) : "%eax","%ebx","%ecx","%edx"); // caso de erro o sistema mais retornar um numero negativo que sera armazenado na var global errno if ((unsigned long)(__res) >= (unsigned long)(-125)) { \ errno = (int) -(__res); \ __res = -1; \ } return (int)__res; } Uma linguagem em 3 níveis Médio Nível: C++ estruturado (C) #include <iostream> using namespace std; int main(int argc, char **argv) { for(register unsigned char i = 0 ; i <= 10 ; i++) { if(i % 2 == 0) { cout << (int) i << " "; } } return 0; } Uma linguagem em 3 níveis Alto Nível: Orientação a Objetos class Pessoa { private: int idade; public: inline void setIdade(int idade) { this->idade = idade; } inline int getIdade(void) { return this->idade; } }; int main(int argc, char **argv) { Pessoa p; p.setIdade(30); cout << p.getIdade() << endl; return 0; } Programação Orientada a Objetos Mais claro e organizado Herança Mais claro e organizado #include <stdio.h> #include <stdlib.h> #include <time.h> #include <iostream> #include <time.h> using namespace std; class Dado { public: int main(int argc, char **argv) { int valor; short int dado1, dado2, soma; int sorteia(void) { return valor = (rand() % 6) + 1; srand (time(NULL)); } dado1 = (short int) (rand() % 6) + 1; dado2 = (short int) (rand() % 6) + 1; soma = dado1 + dado2; printf("%d\n", dado1); printf("%d\n", dado2); printf("%d\n", soma); return 0; } Dado() { srand (time(NULL)); valor = 0; } }; int main(int argc, char **argv) { Dado dado1,dado2; cout << dado1.sorteia() << endl; cout << dado2.sorteia() << endl; cout << dado1.valor+dado2.valor << endl; return 0; } Predefinição de Parâmetros #include <iostream> using namespace std; double soma(double a, double b = 1) { return a + b; } int main(int argc, char **argv) { cout << soma(4,6) << endl; cout << soma(2) << endl; return 0; } Redefinição de Operadores #include <iostream> using namespace std; class A { public: double val; double operator+(double b) { return val-b; } }; int main(void) { A a; a.val = 4; cout << (a + 1) << endl; // imprime 3 return 0; } Templates #include <iostream> using namespace std; template<class Type> void imprime(Type p) { cout << p << endl; } int main(void) { imprime(1); imprime("gdp"); return 0; } Biblioteca STL #include <iostream> #include <deque> using namespace std; #include <iostream> #include <deque> using namespace std; // Deque como pilha: int main (void) { deque<char> d; // Deque como fila int main (void) { deque<char> d; } d.push_back('a'); d.push_back('b'); d.push_back('c'); d.push_back('d'); d.push_back('a'); d.push_back('b'); d.push_back('c'); d.push_back('d'); while(!d.empty()) { cout << d.back() << " "; d.pop_back(); } return 0; while(!d.empty()) { cout << d.front() << " "; d.pop_front(); } return 0; }