C ++ para dummies

Para realizar un cálculo en el programa en C ++ que necesita una expresión. Una expresión es una declaración que tiene un valor y un tipo. En el programa de C ++, una declaración es la declaración que define una variable o se trata de un "tanque de retención" de algún tipo de valor como un número o carácter.

Expresiones

Expresiones tomar una de las siguientes formas:

objName // para una simple expresión objectoperator // para unario expr2 operador operatorsexpr1 // para operatorsexpr1 binario? expr2: expr3 // para el operatorfuncName ternaria ([lista de argumentos]) - // para las llamadas de función

Expresiones literales

Un literal es una forma de expresión de la constante. Los diversos tipos de literales se definen en la siguiente tabla.

EjemploEscribe
1int
1Llong int
1LLlong long int
1.0doble
1.0fflotador
'1'Char
"una cuerda"char * (terminado de forma automática con un carácter nulo)
L "una cadena"wchar_t *
u8 "esto es una cadena UTF-8 con un carácter UTF-8: u2018"char8_t *
u "esto es una cadena UTF-16 con un carácter UTF-16: u2018"char16_t *
U "esto es una cadena UTF-32 con un carácter UTF-32: U00002018"char32_t *
verdadero Falsobool
0b101binaria (C ++ 2014 estándar)

Declaraciones

Declaraciones utilizan ambos tipos intrínsecos y definidos por el usuario. Los tipos son intrínsecas

[] char [] wchar_t [] [] Intfloat [doublebool largo]

Declaraciones tienen una de las siguientes formas:

[] [const] escriba var [= expresión] - // variable [] [const] tipo array [size] [= {list}] - // array [const] tipo de objeto [(lista de argumentos)] - // objeto [const] tipo de objeto [= {lista de argumentos}] - // alternativa [const] escriba * [const] ptr [= expresión puntero] - // pointertype refname = a objetos // referencetype fnName ([lista de argumentos]) - // función

La palabra clave auto se puede utilizar si C ++ puede determinar el tipo de variable en sí:

var auto = 1L- // el tipo de var es long int

La palabra clave decltype extrae el tipo de una expresión. Este tipo puede ser utilizada siempre que se utilice un nombre de tipo. Por ejemplo, el siguiente ejemplo se utiliza decltype para declarar una segunda variable del mismo tipo como una variable existente:

decltype (var1) var2- // el tipo de var2 es el mismo que var1

Una definición de función tiene el siguiente formato:

// Función simple [] escriba fnName (lista de argumentos) {...} // función miembro definido fuera de clase [en línea] Tipo Clase :: func (lista de argumentos) [const] {...} // Constructor / destructores También puede definirse fuera del classClass :: Clase ([lista de argumentos]) {...} Clase :: ~ Clase () {...} // constructores / destructor se pueden eliminar o incumplieron // en lugar de definitionClass: : Clase ([lista de argumentos]) = -Clase :: ~ Clase () = -

Un operador sobrecargado parece una definición de función. La mayoría operadores sobrecargados pueden escribir, ya sea como miembro o funciones simples. Cuando se escribe como una función miembro, *esta es el primer argumento supone que el operador:

Mi clase operador + (const MyClass m1, MiClase const m2) - // simpleMyClass MyClass :: operator + (const MyClass m2) - // membresía

Los usuarios también pueden definir sus propios tipos de uso de la clase o struct palabras clave:

 NombreClase [: [virtual] [público] BaseClass] {: // constructorClassName ([lista arg]) lt; [: miembro (val), ...] {...} | -> NombreClase () [= -] // destructor [virtual] ~ NombreClase () lt; {...} | [= -> // Memberstype datos públicos dataMemberName [= initialValue] - // miembro público functionstype memberFunctionName ([lista arg]) [{...}] // const memberFunctionName FunctionType miembro ([lista arg]) const [{. ..}] // virtual de tipo functionsvirtual miembro memberFunctionName ([lista arg]) [{...}] - // pura virtual de tipo functionsvirtual miembro memberFunctionName ([lista arg]) = 0 - // función que tendrá prioridad sobre una base clase FunctionType memberFunctionName ([lista arg]) Accionamiento - // una función que no puede ser pasada por alto en un memberFunctionName subclasstype ([lista arg]) final -} -

Además, un constructor con un solo argumento puede ser marcado como explícito lo que significa que no será utilizado en una conversión implícita de un tipo a otro. Cómo marcar un constructor como por defecto significa "utilizar el valor predeterminado definición constructor de C ++". Cómo marcar un constructor como borrar elimina la definición del constructor por defecto C ++.

C ++ es compatible con dos tipos de tipos enumerados. El siguiente tipo de enumeración de edad no crea un nuevo tipo:

enum ESTADO {// DC, recibe 0ALABAMA, // obtiene 1ALASKA, // obtiene 2ARKANSAS, // obtiene 3 // ... y así sucesivamente} -INT n = Alaska- // ALASKA es de tipo int

Por defecto una entrada individual es de tipo int pero esto se puede cambiar en el estándar C ++ 2011:

enum ALFABETO: char {A = 'a', // obtiene 'A'B, // obtiene' B'C, // obtiene 'c' // ... y así sucesivamente} -char c = A- // Una es de tipo char

C ++ 2011 permite a un segundo formato que sí crea un nuevo tipo:

// La siguiente enumeración define una nueva clase de tipo STATEenum ESTADO {DC, // obtiene 0ALABAMA, // obtiene 1ALASKA, // obtiene 2ARKANSAS, // obtiene 3 // ... y así sucesivamente} -Estado s = ESTADO :: Alaska- // ahora ESTADO es un nuevo tipo // la siguiente utiliza una diferente subyacente ALFABETO clase typeenum: char {A = 'a', // obtiene 'A'B, // obtiene' B'C, // obtiene ' c '// ... y así sucesivamente} -ALPHABET c = ALFABETO :: A- // Una es de tipo ALFABETO

Declaraciones de plantilla tienen un formato ligeramente diferente:

Tipo // T es proporcionada por el programador en usetemplate  Tipo nombrefunción ([lista arg]) plantilla  clase NombreClase {{...}} -

Los operadores en C ++ Programming

Todos los operadores en C ++ realizan alguna función definida. Esta tabla muestra el operador, la precedencia (que determina quién va primero), cardinalidad y asociatividad en el programa de C ++.

OperadorCardinalidadAsociatividad
Mayor prioridad() [] ->.unariode izquierda a derecha
! ~ + - ++ - * (Elenco) sizeofunariode izquierda a derecha
* /%binariode izquierda a derecha
+ -binariode izquierda a derecha
lt; lt; >>binariode izquierda a derecha
lt; lt; =>> =binariode izquierda a derecha
==! =binariode izquierda a derecha
binariode izquierda a derecha
^binariode izquierda a derecha
|binariode izquierda a derecha
binariode izquierda a derecha
||binariode izquierda a derecha
?:ternarioDe derecha a izquierda
= * = / =% = + = - = = ^ = | = lt; lt; = >> =binarioDe derecha a izquierda
Precedencia más bajo,binariode izquierda a derecha

Control de flujo en C ++ Programming

Las siguientes estructuras ++ C dirigen el flujo de control a través del programa. Si usted es un programador experimentado, la función de estas estructuras será familiar de otros idiomas.

SI

Los siguientes evalúa comando booleanExpression. Si se evalúa como cierto, entonces el control pasa a expressions1. Si no, entonces el control pasa a la opcional expressions2.

si (booleanExpression) {expressions1 -} [else {expressions2-}]

MIENTRAS

Los siguientes evalúa comando booleanExpression. Si esto se evalúa como cierto, entonces el control pasa a expresiones. Al final del bloque, el control pasa de nuevo a booleanExpression y repite el proceso.

while (booleanExpression) {} Expresiones del

DO nº 133-MIENTRAS

Los siguientes ejecuta el comando expresiones. Luego evalúa booleanExpression. Si este resultado true, el control vuelve a la parte superior del bucle y repite el proceso.

do {} Expresiones del tiempo (booleanExpression) -

PARA

Los siguientes ejecuta el comando initCommand que puede ser una expresión o una declaración de variable. Luego evalúa boolExpression. Si esto se evalúa como cierto, entonces el control pasa a expressions1. Si boolExpression es falso, entonces el control pasa a la primera declaración después de la llave de cierre de la para lazo. Una vez que expresiones completa, el control pasa a la expresión contenida en loopExpression antes de volver a boolExpression para repetir el proceso. Si initCommand declara una nueva variable, se sale del ámbito tan pronto como el control pasa fuera del bucle.

para (initCommand- boolExpression- loopExpression) {} Expresiones del

PARA CADA)

La norma de 2011 introduce una segunda forma de para bucle conoce a veces como "para cada" debido a su similitud con la para cada se encuentra en algunos otros idiomas. De esta forma, la variable declarada en declaración toma el valor del primer miembro de lista y ejecuta el expresiones bloque. Cuando se haya completado, la variable declarada toma el segundo valor de lista y ejecuta expresiones de nuevo. Este proceso se repite para cada valor de lista.

para (declaración: lista) {} Expresiones del

INTERRUPTOR

Los siguientes evalúa comando integerExpression y compara el resultado con cada uno de los casos enumerados. Si el valor se encuentra para ser igual a uno de los valores integrales constantes, val1, val2, etc., el control pasa a la correspondiente conjunto de expresiones y continúa hasta que el control se encuentra con una descanso. Si la expresión no es igual a cualquiera de los valores, el control pasa a la expressionsN siguiendo por defecto.

switch (integerExpression) {case val1: expressions1-break caso val2:-expressions2 desglose [predeterminado: expressionsN-]}

Break, continue, GOTO

LA continuar pasa el control al extremo de la abrazadera cerrada de cualquiera de los controles de bucle. Esto hace que el bucle para continuar con la siguiente iteración. Por ejemplo, el siguiente bucle procesa números primos entre 1 y 20:

for (int i = 0- i lt; 20- i ++) {// si el número no es primo ... si) {// ... saltar al siguiente valor de icontinue (esPrimo (i!) -} // Proceder sobre procesamiento}

LA descanso pasa el control a la primera sentencia después de la llave cerrada de cualquiera de los comandos de bucle. Esto hace que la ejecución para salir del bucle inmediatamente. Por ejemplo, el siguiente lee caracteres hasta ya se encuentra al final del archivo:

while (true) {// leer una línea de entrada objectinput >> línea - // si se produce un fallo o al final de su archivo ... si (cin.eof () || cin.fail ()) {// ... entonces salir del LoopBreak -} // proceso de la línea}

LA etiqueta Goto pasa el control a la etiqueta proporcionada. El ejemplo ruptura por encima podría haber sido escrito de la siguiente manera:

while (true) {// leer una línea de entrada objectinput >> línea - // si se produce un fallo o al final de su archivo ... si (cin.eof () || cin.fail ()) {// ... entonces salir del exitLabel loopgoto -} // proceso de la línea} exitLabel: // el control continúa aquí