Algoritmos e Estruturas de dados Flashcards

Estruturas de sequenciação, decisão e repetição. Modularização. Estruturas elementares de dados. Implementação em uma linguagem de alto nível.

1
Q

Quando e por quem o C/C++ foi inventado?

A

A historia começa pela linguagem BCPL, desenvolvida por Martin Richards, a qual influenciou a linguagem B, inventada por Ken Thompson e esta levou ao desenvolvimento do C que teve inicio nos anos 70 por Dennis Ritchie. Em 1980 Bjarne Stroustrup acrescentou várias extensões à linguagem. Em 1983, o nome foi alterado para C++.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

O que é um interpretador de comandos?

A

O interpretador lê o codigo fonte linha a linha, executando uma instrução por vez. Este sempre estará presente na execução do programa.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

O que é um compilador?

A

Um compilador lê o programa inteiro e converte-o em um código executavel. Uma vez compilado o programa poderá ser executado sem a presença do compilador.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Qual a diferença entre tempo de compilação e tempo de execução?

A

Os termos estão ligados à erros sobre os eventos que acontecem durante a compilação ou execução do codigo-fonte, respectivamente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

O que é uma função em C?

A

É uma sub-rotina que contém uma ou mais declarações e realiza uma ou mais tarefas. Convencionou-se que uma função sempre possui parenteses, ex: somar().

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Escreva o código abaixo utilizando uma função separada da função main.

#include

int main ()
{
printf (“meu primeiro programa em C!! \n”);
return 0;
}

A

include

void hello()

{

printf (“meu primeiro programa em C!! \n”);

}

int main ()
{
 hello();
 return 0;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

O que é um argumento de uma função?

Como é chamada uma função que utiliza argumentos?

A

É um valor que é passado para a função no momento em que ela é chamada. São chamadas funções parametrizadas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Escreva uma função que receba o valor 100 e calcule seu valor quadrático (1002)

A

include <cstdio></cstdio>

int square(int x)

{
printf (“%d elevado ao quadrado eh %d\n”, x, x * x);

}

int main ()
{
 int num = 100;
 square(num);
 return 0;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Retorno de valores, escreva uma rotina mull() que calcule o produto entre 5 e 8 e retorne o valor para que a função main o exiba.

A

include <cstdio></cstdio>

int produto(int a, int b)
{
 return(a \* b);
}
int main ()
{
 int num;
 num = produto(5 , 8);
 printf ("O produto de 5 e 8 eh %d\n", num);
 return 0;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

O que deve ser observado sobre funções que retornam valores?

A

a variável que recebe o valor de retorno deve ser do mesmo tipo que o valor retornado. Quando não especificado, a linguagem C assume que é int.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Quais as regras para nomes de funções ou identificadores?

A

Devem começar com letras (a,A,…,z,Z) .

Em C, um identificador pode possuir até 32 caracteres.

A linguagem C é CaseSensitive.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Quais os 5 tipos de dados utilizados em C?

A

A linguagem C não possui cadeia de caracteres String. Para isso é utilizado um vetor de caracteres.

char - 8bits

int - 16bits

float - 32bits

double - 64bits

void - sem retorno

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Quais são os modificadores de tipo utilizados em C e qual a função de cada um?

A

signed - extende a valores negativos e positivos

unsigned - limita a valores positivos

long - extende a capacidade de armezanamento

short - reduz a capacidade de armazenamento

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

O que são variáveis globais?

A

são declaradas fora do escopo das funções e podem ser acessadas por todas as funções do programa.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

o que são variaveis locais?

A

são declaradas dentro de um bloco e estão restritas somente a esse bloco.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Como se define uma constante em C?

A

a definição é feita no inicio do programa e diz ao pre-compilador para substituir um nome por um valor

#define constante 8

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

O que são códigos de barra invertida?

A

são constantes especiais para uso específico:

\b - retrocesso

\n - Nova linha

\r - retorno de carro

\t - tabulação horizontal

\v - tabulação vertical

\a - sinal sonoro

" - imprime “

|’ - imprime ‘

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

O que são e quais são os operadores em C?

[Consulta]

A

É um simbolo que diz ao compilador para realizar manipulações matemáticas ou lógicas. São divididos em três classes:

aritméticos: +, =, *, /, %,

relacionais: >, >=, <, <=, ==, !=,

lógicos: &&, ||, !

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Operadores de Endereço:

& - endereço de uma variavel

* - conteudo do endereço

A

são utilizados com pointers para acesso a endereços de memória:

int var, *x; //declara a variavel var e o ponteiro *x

x = &var; // x recebe o endereço de var

var = *x; //var recebe o conteudo do endereço *x

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

O que são expressões em C?

A

É a combinação de operadores, constantes e variáveis.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

O que se afirma em C quanto ao uso de parenteses e espaçamentos?

A

o uso de parenteses redundantes ou adicionais não causa erros ou diminuit a velocidade de execução da expressão. É interessante utilizá-los para facilitar a leitura do codigo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Qual o esqueleto (estrutura) de um programa em C?

A

#include <cstdio></cstdio> //declara de bibliotecas e constantes

int produto; //declara variaveis globais

void func(); //declara protótipos de funções

  • *int main ()** //declaração obrigatoria da função main
  • *{**

int x; // declaracao de variaveis locais

// comandos da funcao principal
return 0;
}

//funções do programador

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Regra de comandos e blocos

A

todo comando é finalizado com um ponto-virgula ;

todo bloco de comandos é definido entre chaves {}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Especificações de conversão em C utlizando scanf() ou prinf()

A

%d - Número decimal inteiro (int).

  • *%i** - equivalente a %d.
  • *%u** - Número decimal natural (unsigned int), ou seja, sem sinal.
  • *%o** - Número inteiro representado na base octal.
  • *%x** - Número inteiro representado na base hexadecimal.
  • *%X** - Hexadecimal com letras maiúsculas
  • *%f** - Número decimal de ponto flutuante.
  • *%e** - Número em notação científica,
  • *%E** - Número em notação científica com o “e”maiúsculo
  • *%g** - Escolhe automaticamente o mais apropriado entre %f e %e.
  • *%p** - Ponteiro: exibe o endereço de memória do ponteiro em notação hexadecimal.
  • *%c** - Caractere: imprime o caractere que tem o código ASCII correspondente ao valor dado.
  • *%s** - Sequência de caracteres (string, em inglês).
  • *%%** - Imprime um %
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

O que é a função scanf()?

A

é uma das funções de entrada de dados da linguagem C.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Como é utilizada a declaração if-else

A

if (condição 1) {

comandos;

}

else if (condição 2) {

comandos;

}

else {

comandos;

}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Escreva um programa que receba duas variaveis inteiras e apresente o maior valor.

A

include

int a,b;

int maior(int x, int y)
{
 if (x \> y) return x;
 else if (y \> x) return y;
 else return 0;
}
int main ()
{
 int resultado;
 printf("Digite os numeros para comparar, separados por espaco\n");
 scanf("%d%d", &a, &b);
 resultado = maior(a,b);
 if (resultado == 0) printf ("Os valores sao iguais");
 else printf("O maior numero eh %d\n", resultado);
 return 0;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Escreva um algoritmo que leia um valor real informado pelo o usuário e retorne “positivo” se > 0, “negativo” se < 0, ou “neutro” se = 0;

A

include <cstdio></cstdio>

float a;

int main ()
{
 printf("Digite um valor real\n");
 scanf("%f", &a);
 if (a \> 0) printf ("positivo");
 else if ( a \< 0) printf("negativo");
 else printf("neutro");
 return 0;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

escreva um algoritmo que receba um par de coordenadas e informe em qual quadrante está o ponto referente as coordenadas.

A

float a,b;

int CalculaQuadrante(int x, int y)
{
 if (a \> 0) 
 if (b \> 0) return 1;
 else return 4;
 else if ( a \< 0)
 if (b \> 0) return 2;
 else return 3;
 else return 0;
}
int main ()
{
 printf("Digite um par de coordenadas\n");
 scanf("%f,%f", &a, &b);
 int result = CalculaQuadrante(a, b);
 if (result == 1) printf("O ponto esta no primeiro quadrante");
 else if (result == 2) printf("O ponto esta no segundo quadrante");
 else if (result == 3) printf("O ponto esta no terceiro quadrante");
 else if (result == 4) printf("O ponto esta no quarto quadrante");
 else printf("O ponto esta sobre algum eixo");
 return 0;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Como é utilizada a declaração switch?

A

switch (variavel) {

caso cte1:

comandos;

break;

caso cten:

comandos;

break;

default:

comandos;

}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Escreva um programa que receba um valor entre 1 e 7 e apresente o dia da semana correspondente.

A

include <cstdio></cstdio>

int dia=0;

int main()
{
 printf("Informe um valor entre 1 e 7\n");
 scanf("%d", &dia);
 switch (dia)
 {
 case 1:
 printf("domingo");
 break;
 case 2:
 printf("segunda-feira");
 break;
 case 3:
 printf("terça-feira");
 break;
 case 4:
 printf("quarta-feira");
 break;
 case 5:
 printf("quinta-feira");
 break;
 case 6:
 printf("sexta-feira");
 break;
 case 7:
 printf("sabado");
 break;
 default:
 printf("dia invalido");
 }
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Como é utilizada a declaração for

A

for (valor inicial; valor final; incremento){

comandos;

}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Fazer uma rotina para contar as ocorrencias da letra ‘a’ em uma string.

A
#include 
#include

char dig;
int cont=0;

int main()
{
 printf("Vou contar quantas vezes vc digitou a letra \"a\", digite algo e pressione \"enter\". ");
 printf("Digite \"Q\" para sair\n");
 for( ; ; )
 {
 scanf("%s", &dig);
 if (dig == 'Q') break;
 else if (dig == 'a') cont++;
 }
 printf("voce digitou a letra a %d ", cont);
 printf(" vezes");
 return 0;
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Como é utlizada a declaração while?

A

while (condição) {

comandos;

}

ou

do {

comandos;

} while (condição);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Escreva uma função que receba um número e retorne o fatoria deste número. Lembre-se que 0! e 1! = 1

A

include

int valor;

int main()
{
 int aux=1;
 printf("Informe um valor\n");
 scanf("%d", &valor);
 printf("O fatorial de %d eh: ",valor);
 if((valor == 1)||(valor == 0))
 {
 printf("1");
 return 0;
 }
 while(valor \>0)
 {
 aux = aux \* valor;
 valor--;
 }
 printf("%d", aux);

return 0;
}

36
Q

O que são vetores e como são declarados?

A

vetores são um conjunto de elementos com as mesmas características.

tipo nome [tamanho];

int vet[3] = { 1, 10, 3 };

37
A

é um conjunto de caracteres terminado por um caractere nulo. Este caracter deve ser contado sempre.

38
Q

O que são matrizes e como são declarados?

A

São vetores multidimensionais:

tipo nome [dim1] [dim2] [dimN];

float mat [3] [4] = { 1.0, 3.0, 4.3, 9.9,

3.8, 3.3, 6.4, 2.53,

2, 6.7, 9.67, 10 }

39
Q

O que são ponteiros e qual a sua utilizaçao em C?

A

Ponteiro é uma variavel que guarda um endereço de memória de outro objeto. Os ponteiros provêem o meio para que as funções modifiquem os seus argumentos de chamada.

40
Q

escreva um algoritmo que armazene o valor 100 em uma variavel cont e atribua esse valor a outra variavel val através do ponteiro cont_addr.

A

#include <cstdio></cstdio>

int main()
{
int *cont_addr, cont=100, val;
cont_addr = &cont;
val = *cont_addr;
printf(“%d”, val);
return 0;
}

41
Q

O que são os tipos de dados definidos pelos usuário e quais são eles?

A

Estrutura - agrupamento de variáveis sobre um nome, união - habilita um mesmo pedaço de memória a dois ou mais tipos diferentes, enumeração - lista de simbolos e typedef - cria um novo nome para um tipo existente.

42
Q

Como é declarada uma estrutura e uma váriavel desse tipo?

A

A estrutura é declarada como:

struct endereço {

char nome[30];

char sobrenome[30];

};

uma variavel do tipo struct é declarada como:

struct endereço nome;

43
Q

Declare uma estrutura com um elemento inteiro e um double. Atribua valores a estes elementos e copie os elementos dessa estrutura para outra semelhante e imprima esses valores.

A

#include <cstdio></cstdio>

**int main()
{
struct exemplo {
int i;
double d;
} est1, est2;

est1. i = 11;
est1. d = 11.11;

est2 = est1;
printf(“%d %1f”, est2.i, est2.d);
}**

44
Q

Enumerações são conjuntos de constantes inteiras. Declare uma enumeração e exiba seus valores para as moedas de Real.

A

include <cstdio></cstdio>

int main()
{
 enum moeda { UM,CINCO,DEZ,QUARTO,MEIO,REAL };

enum moeda dinheiro;

printf(“%d %d %d %d %d %d”, UM, CINCO, DEZ, QUARTO, MEIO, REAL);

}

45
Q

O Typedef permite dar novos nomes para os tipos de dados existentes. Renomei o tipo int, float e char.

A

include <cstdio></cstdio>

int main()
{
 typedef int inteiro;
 typedef float flutuante;
 typedef char caractere;

inteiro i=100;
flutuante f=11.11;
caractere c=’a’;

printf(“%d %f %c”, i, f, c);

}

46
Q

Qual a diferença entre chamada por valor e chamada por referencia de uma função?

A

Chamada por valor ou por cópia - esse método copia o valor de um argumento para o escopo. Mudança no paramentro não tem efeito na variável original.

Chamada por referencia - esse método copia o endereço de um argumento para o escopo. Alterações no paramentro implicam em aterações na variável utilizada.

47
Q

construa um algoritmo que chame uma rotina por valor e calcule esse valor ao quadrado e o imprima na tela juntamente com o valor enviado.

A

include <cstdio></cstdio>

int a;
int sqr(int x)
{
 return (x \* x);
}
int main()
{
 printf("Digite um valor inteiro\n");
 scanf("%d", &a);
 printf("%d %d", sqr(a), a);
 return 0; 
}
48
Q

construa um algoritmo que chame uma rotina por referencia e calcule esse valor ao quadrado e o imprima na tela juntamente com o valor enviado.

A

include <cstdio></cstdio>

int sqr(int \*x)
{
 int a = \*x;
 return (a \* a);
}
int main()
{
 int a;
 printf("Digite um valor inteiro\n");
 scanf("%d", &a);
 printf("%d %d", sqr(&a), a);
 return 0; 
}
49
Q

O que são funções recursivas?

A

A recursividade é o processo de definição de algo em torno de si mesmo.

50
Q

Utilizando a recursividade faça um programa que calcule o fatorial de um nº inserido pelo usuário.

A

include <cstdio></cstdio>

int fatorial(int x)
{
 int result;
 if ((x == 0)||(x == 1)) return 1;
 result = x \* fatorial(x - 1);
 return result;
}
int main()
{
 int n,f;
 printf("Informe um numero positivo\n");
 scanf("%d", &n);
 f = fatorial(n);
 printf("%d", f);
 return 0; 
}
51
Q

orientação_objetos

Definição de objeto.

A

Entidade lógica que contém dados e métodos de manipulação de dados. Os dados e métodos podem ser públicos ou privados.

52
Q

Definição de Encapsulamento.

A

o nome se dá ao fato dos objetos possuirem partes públicas acessiveis em todo programa e partes privadas acessiveis apenas do próprio dono.

53
Q

Definição de Polimorfismo.

A

E suma significa que um objeto pode assumir varias formas. O objetivo é permirtir uma classificação mais generalizada para especificar uma classe geral.

54
Q

Definição de Herança

A

É o processo em que um objeto pode adquirir as propriedades de outro objeto. É uma instância específica de uma classe mais geral (polimórfica).

55
Q

Qual a forma geral de declaração de uma classe em C++?

A

class NomeDaClasse {

dados e funções privadas

public:

dados e funções publicas

} lista de objetos;

56
Q

Como identificar uma função membro de uma classe mae?

A

A função é identificada pelo operador de escopo de resolução ::

classe_mae::funcao_membro() {}

57
Q

Qual a definição de sobrecarga de uma função?

A

Várias funções podem compartilhar o mesmo nome, desde que suas declarações de parametros sejam diferentes.

58
Q

Faça um programa que leia um int, um double e um long e utilizando a sobrecarga, utilize a funçao correta para processar a informação.

A
  • *#include**
  • *using namespace std;**
**void leia(const char \*str, int \*i);
void leia(const char \*str, double \*d);
void leia(const char \*str, long \*l);**

**main(){
int i;
double d;
long l;

leia(“Informe um inteiro:”, &i);
leia(“Informe um double:”, &d);
leia(“Informe um long:”, &l);

cout << “O inteiro foi: “ << i;
cout << “O double foi: “ << d;
cout << “O long foi: “ << l;

return 0;
}**

void leia(const char *str, int *i){
cout << str;
cin >> *i;
}

void leia(const char *str, double *d){
cout << str;
cin >> *d;
}

void leia(const char *str, long *l){
cout << str;
cin >> *l;
}

59
Q

Construtores de Destrutores

A

É comum um objeto requerer inicialização antes de ser utilizado. Isto pode ser feito com uso de classes contrutoras

60
Q

faça um programa que atraves de uma classe principal, intancie uma classe filha utilizando construtor e destrutor.

A

#include <iostream><br></br> //declara um espaço de nomes do std para não ter que declarar std::funcao em todas as funcoes do std, cin, cout, cerr<br></br>using namespace std;<br></br> // declara a classe<br></br>class fila<br></br>{ // por definição todos os item de uma classe são privados<br></br> int q[100];<br></br> int sloc, rloc;<br></br> <br></br>public:<br></br> // para tornar um membro desse classe público, este deve vir apos essa linha<br></br> fila(); //construtor<br></br> ~fila(); //destrutor<br></br> void qput(int i);<br></br> int qget(void);<br></br>}; <br></br> //quando codificar uma função membro, deve ser informado a qual classe essa funcao pertence atraves do class::funcao</iostream>

fila::fila(void){ //construtor
rloc = sloc = 0;
cout << “fila inicializada\n”;
}
fila::~fila(void){ //destrutor
cout << “fila destruida\n”;
}
void fila::qput(int i){
if (sloc == 3){
cout << “A fila esta cheia\n”;
return;
}
sloc++;
q[sloc] = i;
}

**int fila::qget(){
if (rloc == sloc){
cout << “A fila esta vazia\n”;
return 0;
}
rloc++;
return q[rloc];
}
main() {
//cria dois objetos fila
fila a, b;

a. qput(1);
b. qput(4);
a. qput(2);
b. qput(5);
a. qput(3);
b. qput(6);

cout << a.qget() << “ “;
cout << b.qget() << “ “;
cout << a.qget() << “ “;
cout << b.qget() << “ “;
cout << a.qget() << “ “;
cout << b.qget() << “ \n”;

return 0;
}**

61
Q

Como é possível para uma função não-membro de uma class ter acesso a partes privadas dessa class?

A

Através da declaração da função como uma friend da class.

62
Q

Definição da palavra reservada this

A

Sempre que se invoca uma função membro, automaticamente é passa um ponteiro para o objeto que a invoca. Esse ponteiro é acessado atraves da palavra this

63
Q

Coloque cada classe no seu próprio arquivo

A

Para melhorar a manutenção do código, procure sempre manter dois arquivos para cada classe, um para declaração (arquivo .h ou .hpp) e outro para a implementação (arquivo .cpp). Evite colocar mais de uma classe num único arquivo, a não ser que as classes sejam extremamente dependentes uma da outra, tipo inseparáveis.

64
Q

Separe em dois arquivos a declaração da classe e sua implementação

A

Em C++ costuma-se separar a definição de cada classe em dois arquivos: um para declaração (arquivo .h ou .hpp) e outro para a implementação (arquivo .cpp).

65
Q

Sempre dê nomes descritivos aos identificadores

A

Se uma variável guarda o nome de um funcionário, o nome mais provável é nomeDoFuncionario ou nome_do_funcionario. Se um método calcula o salário, o nome mais óbvio seria calculaSalario() ou calcula_salario(). Dê nomes que façam sentido.

66
Q

Use consistentemente alguma convenção para nomear identificadores

A

palavras em nomes de classes e enumerações sempre começam com letra maiúscula e as restantes minúsculas. Nomes de variáveis e métodos sempre em letra minúscula e em nomes compostos cada palavra exceto a primeira começa com letra maiúscula. Constantes sempre com todas as letras maiúsculas e separando palavras com underscore. Exemplos:

class AlgumaClasse {};
enum AlgumEnum {};
void algumMetodo();
int algumaVariavel;
const int ALGUMA\_CONSTANTE;
67
Q

Use consistentemente um estilo de formatação que facilite a clareza do programa

A

Para melhorar a clareza e a legibilidade do seu código, é bom manter um estilo que seja convencional, como por exemplo, indentar usando a tecla TAB ou com no mínimo uns 3 espaços. Usar linhas em branco antes e depois da implementação de métodos, etc.

68
Q

Comentários são valiosos, mas não abuse deles

A

Comentários podem tanto esclarecer o leitor do código como confundir, se você não os manter atualizado. De que adianta um comentário que está no código há uma década se o código já foi alterado mil vezes e nem sequer faz o que o comentário diz que ele faz? Se vai encher o código de comentários então os mantenha atualizados com o que o código realmente está fazendo. Outro detalhe, comentário demais é sinônimo de código ruim. Se você precisa comentar tanto assim pra explicar o que o código faz, provavelmente é porque o seu código em si não está claro o suficiente.

69
Q

Evite números mágicos, usando constantes com nome

A

Números mágicos são aqueles números que aparecem às vezes no código e que não são dados introduzidos de fora do programa, são constantes numéricas que não mudam nunca. O problema é que quando você vê uma constante numérica assim perdida em qualquer lugar, dependendo do caso não é possível entender o que aquele número significa. Uma forma muito mais atraente e que clarifica o código é usar constantes com nome ou constantes simbólicas.

70
Q

Prefira enumerações a constantes simbólicas

A
#define SOLIDO 0
#define LIQUIDO 1
#define GRANDE 3
#define MEDIO 2
#define PEQUENO 1

Usando enumerações:
enum Estado { SOLIDO, LIQUIDO };
enum Tamanho { GRANDE, MEDIO, PEQUENO };

71
Q

Evite repetições de código sempre que possível

A

Sempre que você ver que no programa existe algum trecho de código que se repete em vários pontos, é sinal de que talvez aquele código poderia estar encapsulado em uma função, método ou classe. Sempre preste atenção em código repetido e elimine sempre que for possível substituí-lo por uma chamada de função.

72
Q

Escolha o tipo mais eficiente para variáveis primitivas

A

Sempre lembre-se da capacidade das variáveis primitivas em C++. um char pode armazenar um valor entre -128 e 127. Um short pode armazenar um valor entre -32768 a 32767. Existem compiladores atualmente que otimizam o código e substituem os tipos das variáveis transparentemente quando possível, mas se você valoriza o seu trabalho não confie no compilador para fazê-lo por você.

73
Q

Aprenda a usar os contêineres da STL ou de outras bibliotecas

A

Na STL você encontra duas classes imprescindíveis e extremamente úteis no dia-a-dia: string e vector. Com a classe string você obtém strings reais e com a classe vector você obtém arrays de tamanho variável, então é importante conhecer e estudar esta biblioteca.

74
Q

Ao retornar objetos grandes ou contêineres, retorne referências ao invés de cópias

A

Retorne referências ao invés de cópias. Quando você retorna uma referência para um objeto ou contênier, o sistema não copia nada, a única coisa que ele faz é te retornar o objeto original.

75
Q

Ponteiros devem ser sempre inicializados

A

Todo ponteiro deve ser inicializado na declaração para evitar que ele seja utilizado incorretamente. Se não tiver como inicializar um ponteiro logo na declaração, então aponte-o para NULL

76
Q

Delete e anule sempre os ponteiros quando terminar de utilizá-los

A

atribua NULL ao ponteiro

77
Q

Passe objetos grandes sempre por referência ou ponteiro

A

Passar parâmetros para funções e métodos leva tempo. Dependendo do tamanho do objeto, e dependendo de quantas vezes esse objeto é passado inteiro por parâmetro

78
Q

Evite longas listas de parâmetros, prefira passar referência a um único objeto

A

Se você tem um método ou função que recebe 10 parâmetros, pare e pense na possibilidade de passar uma estrutura contendo esses parâmetros. crie uma estrutura que encapsule esses dados e passe uma referência da estrutura por parâmetro.

79
Q

Declare os membros de uma classe sempre como sendo privados

A

Uma das idéias principais por trás da orientação a objetos é que as classes encapsulam dados e métodos para operar sobre esses dados. Se você tem uma classe onde todos os membros são públicos, você está desrespeitando o princípio do encapsulamento

80
Q

Crie métodos de acesso para controlar alterações nos membros privados

A

Para cada membro de dados ao qual seja permitido o acesso, você implementa métodos que alterem ou retornem o seu valor. A diferença está no fato de que, quando o acesso é feito apenas através de métodos, é possível controlar e restringir as alterações que podem ser feitas em um objeto, evitando assim a manipulação indevida dele e mantendo a integridade de seus dados.

81
Q

Em uma hierarquia declare destrutores de superclasse sempre como sendo virtuais

A

quando um objeto de subclasse for destruído, o sistema seja capaz de invocar os destrutores tanto da subclasse quanto o da superclasse.

82
Q

Cada método deve ter somente uma única responsabilidade

A

Ao implementar um método, sempre lembre-se de verificar que ele executa uma única tarefa. Se você perceber que um método está fazendo coisas que não tem relação nenhuma entre si, é sinal de que é preciso dividí-lo em dois ou mais métodos.

83
Q

Cada classe deve ter somente uma única responsabilidade

A

Se o seu programa em C++ consiste numa única classe que faz tudo, então o seu programa não é orientado a objetos.

84
Q

Prefira composição a herança

A

a composição é quando você inclui membros em uma classe que são instâncias ou referências a objetos de outras classes. Em certos casos, é possível modelar um problema usando herança ou composição. Sempre que você tiver essa escolha, prefira composição.

85
Q

Polimorfismo só ocorre com método virtual

A

Polimorfismo no C++ é, na prática, quando você consegue acessar o método da subclasse através de um ponteiro de superclasse, desde que ele aponte para um objeto de subclasse. O erro de tentar obter polimorfismo de um método não-virtual é muito comum, então lembre-se sempre de declará-lo virtual na superclasse para ver a mágica polimórfica diante dos seus olhos!