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.
Ejemplo | Escribe |
---|
1 | int |
1L | long int |
1LL | long long int |
1.0 | doble |
1.0f | flotador |
'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 Falso | bool |
0b101 | binaria (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 ++.
| Operador | Cardinalidad | Asociatividad |
---|
Mayor prioridad | () [] ->. | unario | de izquierda a derecha |
| ! ~ + - ++ - * (Elenco) sizeof | unario | de izquierda a derecha |
| * /% | binario | de izquierda a derecha |
| + - | binario | de izquierda a derecha |
| lt; lt; >> | binario | de izquierda a derecha |
| lt; lt; =>> = | binario | de izquierda a derecha |
| ==! = | binario | de izquierda a derecha |
| | binario | de izquierda a derecha |
| ^ | binario | de izquierda a derecha |
| | | binario | de izquierda a derecha |
| | binario | de izquierda a derecha |
| || | binario | de izquierda a derecha |
| ?: | ternario | De derecha a izquierda |
| = * = / =% = + = - = = ^ = | = lt; lt; = >> = | binario | De derecha a izquierda |
Precedencia más bajo | , | binario | de 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í