Índice:
- O comando C ++ goto
- O operador ternário C ++
- Tipos enumerados em C ++
- namespaces C ++
- Funções virtuais puras em C ++
- A classe de seqüência de caracteres C ++
- Herança múltipla em C ++
- Modelos de C ++ e a Biblioteca de modelos padrão
Vídeo: Curso de HTML5 - 09 - Imagens em HTML5 - by Gustavo Guanabara 2024
A linguagem C ++ contém tantos recursos que os programadores iniciantes não podem entender cada um. Felizmente, você não precisa dominar todos os recursos do idioma para escrever grandes programas do mundo real. Os seguintes são dez recursos que você pode querer olhar para frente, apenas no caso de você vê-los nos programas de outras pessoas.
O comando C ++ goto
Este comando vai todo o caminho de volta para C, o progenitor de C ++. Em princípio, usar esse comando é fácil. Você pode colocar o rótulo goto; onde você quiser. Quando C ++ se depara com este comando, o controle passa imediatamente para o rótulo, conforme demonstrado neste fragmento de código:
para (;;) {if (expressão condicional) {goto outahere;} // … o que você quiser …} outahere: // … o programa continua aqui …
Na prática, no entanto, goto apresenta muitas maneiras de estragar. Em qualquer caso, não demorou muito para que os programadores percebessem que os dois usos mais comuns do goto eram para sair de loops e para o próximo caso em um loop. O Comitê de Normas C introduziu interrupção e continuação e quase completamente removido a necessidade do comando goto.
O operador ternário C ++
O operador ternário é um operador exclusivo para C e C ++. Funciona da seguinte forma:
int n = (condicional)? expression1: expression2;
O? O operador primeiro avalia o condicional. Se a condição for verdadeira, o valor da expressão é igual ao valor da expressão1; De outra forma, é igual ao valor da expressão2.
Por exemplo, você pode implementar uma função máxima () da seguinte maneira:
int max (int n1, int n2) {return (n1> n2)? n1: n2;}
O operador ternário pode ser aplicado a qualquer tipo de numérico, mas não pode ser sobrecarregado. O operador ternário é verdadeiramente uma expressão - não uma declaração de controle como uma if.
Tipos enumerados em C ++
A idéia simples é que você pode definir constantes e permitir que C ++ atribua valores, como mostrado aqui:
enum Cores {PRETO, AZUL, VERDE, AMARELO, VERMELHO}; Cores myColor = PRETO;
O problema com os tipos enumerados reside na implementação: em vez de criar um tipo verdadeiro, o C ++ usa inteiros. Nesse caso, BLACK é atribuído o valor 0, BLUE é atribuído 1, GREEN2 e assim por diante.
A Biblioteca Padrão 2011 para C ++ "corrigiu" esse problema, criando um tipo de classe enumerado, conforme mostrado no seguinte trecho:
classe de enum {{{{{{{{{{{{{{{{{{{; Cores myColor = Cores:: PRETO;
Nesta versão, Cores é um novo tipo.Cada uma das constantes, PRETO, AZUL, e assim por diante, são membros do tipo Cores. Você ainda pode lançar um objeto de classe Cores em um int, mas não é permitido um elenco implícito.
namespaces C ++
É possível atribuir diferentes entidades em duas bibliotecas diferentes o mesmo nome. Por exemplo, a função grade () dentro da biblioteca Student provavelmente atribui uma nota, enquanto a função grade () dentro da biblioteca CivilEngineering pode definir a inclinação no lado de uma colina. Para evitar esse problema, C ++ permite que o programador coloque seu código em um namespace separado. Assim, o grau dentro do espaço para nome do Estudante é diferente do grau dentro do CivilEngineering.
O namespace está acima e além do nome da classe. A função de membro grade () da classe BullDozer no namespace CivilEngineering tem o nome expandido CivilEngineering:: BullDozer:: grade ().
Todos os objetos e funções da biblioteca estão no namespace std. A declaração no início do modelo do programa usando namespace std; diz que se você não vê o objeto especificado no namespace padrão, então vá procurar no std.
Funções virtuais puras em C ++
Você não precisa definir uma função declarada virtual. Essa função indefinida é conhecida como uma função de membro virtual puro . Naquele momento, no entanto, as coisas ficam complicadas. Por exemplo, uma classe com uma ou mais funções virtuais puras é dita abstrata e não pode ser usada para criar um objeto. Ligue este assunto depois de se sentir confortável com funções virtuais e ligação tardia.
A classe de seqüência de caracteres C ++
A maioria dos idiomas inclui uma classe de string como um tipo intrínseco para lidar com strings de caracteres facilmente. Em teoria, a classe string deve fazer o mesmo para C ++. Na prática, no entanto, não é assim tão simples. Como a string não é um tipo intrínseco, as mensagens de erro que o compilador gera quando algo dá errado são mais semelhantes às associadas a classes definidas pelo usuário. Para um iniciante, essas mensagens podem ser muito difíceis de interpretar.
string não é mesmo uma classe. É uma instância de uma classe de modelo. As mensagens de erro podem ser de tirar o fôlego.
Herança múltipla em C ++
Uma classe pode realmente estender mais do que uma classe base. Isso parece simples, mas pode ser bastante complicado quando as duas classes base contêm funções de membros com o mesmo nome. Pior ainda é quando ambas as classes base são subclasses de alguma classe comum.
Na verdade, tantos problemas surgem que o C ++ é o único idioma semelhante a C que suporta múltiplas heranças. Java e C #, ambos os idiomas derivados de C ++, decidiram soltar suporte para múltiplas heranças.
Modelos de C ++ e a Biblioteca de modelos padrão
Os fabricantes de C ++ notaram como funções semelhantes, como as seguintes:
int max (int n1, int n2) {if (n1> n2) {return n1;} retorno n2;} duplo máximo (duplo n1, duplo n2) {if (n1> n2) {return n1;} return n2;} char max (char n1, char n2) {if (n1> n2) {return n1;} return n2;}
"Não seria legal", diz um outro, "se você pudesse substituir o tipo por um tipo de pseudo-tipo que você poderia definir no tempo de compilação?"Antes de conhecê-lo, os modelos presto - se tornam parte do modelo C ++:
T max (T t1, T t2) {se (t1> t2) {retornar t1;} retornar t2;}
Agora o programador pode crie um max (int, int) substituindo T por int e compilando o resultado, crie um máximo (duplo, duplo), substituindo T por duplo e assim por diante. O Comitê de Padrões até lançou uma biblioteca inteira de classes, conhecida como Biblioteca de Modelo Padrão (STL para abreviar), com base em classes de modelo.
Para um iniciante, no entanto, o assunto das classes de modelo começa a ficar sintaticamente muito complicado. Além disso, os erros que o compilador gera quando você cria uma instanciação de modelo errado são desconcertantes para um especialista, não se preocupe com um iniciante. Este é definitivamente um tópico que precisa esperar até se sentir confortável com a linguagem básica.