VinBR

PM 12/09/2011

Oct 18th, 2011
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. // notasdogarcia.blog.com
  2.  
  3. // A aula de hoje é uma revisão preparando para a prova que será segunda feira.
  4.  
  5. NOTA:
  6. Quando declarar uma variável estática dentro de uma classe declare também um protótipo dela, na forma:
  7.  
  8. tipo nomeDaClasse::nomeDaVariavel;
  9.  
  10. do lado de fora da classe, ou haverá erro de linkagem durante a compilação.
  11.  
  12. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  13.  
  14. NOTA:
  15. Se uma classe possui uma função "virtual pura" ela não pode estanciar um objeto pois ela se torna uma classe abstrata.
  16. Ou seja nunca faça new A() se A é abstrata.
  17.  
  18. ex:
  19.  
  20. class B
  21. {
  22. int a;
  23. float c;
  24.  
  25. public:
  26.  
  27. int d;
  28.  
  29. char leStr();
  30.  
  31. int f() = 0;
  32. }
  33.  
  34. Esse f() é uma função virtual pura e a classe B portanto é abstrata e só tem significado se for herdada por outra classe que não seja abstrata.
  35.  
  36. Uma função virtual pura é uma função que precisa de uma redefinição em uma classe filha para que tenha sentido.
  37.  
  38. ex:
  39.  
  40. class C : public B
  41. {
  42. public:
  43. int f() { ... }
  44. }
  45.  
  46. Essa funçào f() definida aqui tem acesso à variável d, da classe B e tem acesso a função leStr() também da classe B.
  47. Um objeto da classe C pode ser alocado com new C(); porém um objeto da classe B não pode, devido a sua função virtual pura.
  48.  
  49. Qual o sentido de se criar uma função virtual pura?
  50. Lembram-se da caracteristica de se poder criar um ponteiro para um pai, e usa-lo para apontar para um filho?
  51. Se voce desejar usar uma função do filho, usando este ponteiro para pai, voce precisa que o pai tenha essa função de mesmo nome, mas com uma declaração virtual,
  52. ou virtual pura.
  53.  
  54. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  55.  
  56. Lembrete:
  57.  
  58. Um catch(A) é capaz de pegar exceções do tipo A.
  59. Mas não apenas isso.
  60. Se B é filho de A um catch(A) também captura uma exceção do tipo B.
  61.  
  62. Então se voce quiser colocar dois catchs um para cada faça assim:
  63.  
  64. catch(B) { }
  65. catch(A) { }
  66.  
  67. Se voce fizer:
  68.  
  69. catch(A) { }
  70. catch(B) { }
  71.  
  72. O segundo catch nunca será ativado, pois tanto as exceções A quanto as B serão pegas pelo catch(A).
  73.  
  74. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  75.  
  76. Criação de objetos com Template.
  77.  
  78. Seja a declaração de um template:
  79.  
  80. template <class T> class Stack
  81. {
  82. T* v;
  83. T* p;
  84. int sz;
  85.  
  86. public:
  87. T pop(){ return * --p; }
  88. void push(T);
  89. }
  90.  
  91. Para usar essa classe, voce precisa declara-la assim:
  92.  
  93. Stack<char> pilha;
  94.  
  95. Esse objeto que declarei agora é um objeto com 2 chars e um inteiro. Legal não?
  96.  
  97. Eu posso usar como tipo T qualquer tipo cujas operações que eu uso dentro das funçòes também funcionem para o tipo que eu desejo.
  98.  
  99. - - -
  100.  
  101. Caso eu queira definir uma função fora do template faço assim:
  102.  
  103. template <class T> push<T>(){...}
  104.  
  105. - - - - -
  106.  
  107. Voce pode fazer vários e vários parametros para um template.
  108. Assim pode-se fazer:
  109.  
  110. template <class T, int size>
  111. ou etc.
  112.  
  113. // fim da aula =].
Advertisement
Add Comment
Please, Sign In to add comment