Libro C++
C++

Libro C++: Excelente libro en PDF

Compártelo

Excelente Libro C++ en PDF

Libro C++ fue escrito para ayudar a los desarrolladores profesionales de C # a aprender la moderna programación en C ++. El objetivo de este libro es aprovechar sus conocimientos C # existentes con el fin de ampliar sus habilidades. Si usted necesita utilizar C ++ en un próximo proyecto, o simplemente quiere aprender un nuevo idioma (o volver a familiarizarse con él),

Este libro le ayudará a aprender todas las piezas fundamentales de C ++ para que pueda entender los proyectos y muestras escritas en C ++ y comenzar a escribir sus propios programas de C + +.

Como con cualquier tema grande, simplemente no había espacio para cubrir todo (un ejemplo son las nuevas características atómicas añadidas en C ++ 11), y otros podrían haber decidido ordenar los temas de manera diferente.

Estoy pensando particularmente en los punteros, un tema que cubrí en profundidad sólo más allá en el libro. Son importantes, por lo que algunos podrían haber elegido para cubrirlos antes, pero siento que usted no necesita entender los indicadores para comprender el material que precede a su cobertura; Comprensión de los temas anteriores hará que mucho más fácil para que usted los entienda.

He hecho todo lo posible para ser lo más preciso posible sin que me parezca a una especificación de lenguaje o archivo de documentación. Espero haberlo logrado. Consulté la especificación del lenguaje C ++ 11 con frecuencia mientras escribo esto, y también leo todo desde publicaciones de StackOverflow, a documentos de MSDN, a documentos de GCC y más allá.

Hay áreas donde he simplificado intencionalmente las cosas. A medida que continúe expandiendo su conocimiento de C + +, sin duda llegarás a los problemas en los que necesitas tener una comprensión con el fin de lograr su objetivo o eliminar un error. Si la lectura de este libro imparte suficiente conocimiento y una sensación suficiente para el lenguaje que es capaz de reconocer, diagnosticar y resolver esos problemas, entonces estaré contento de haber logrado mis objetivos.

Argumentos y parámetros

Uso los términos argumento y parámetro en varios puntos de este libro. Para mí, un argumento es un valor que se pasa a una función cuando se llama en un programa, mientras que un parámetro es parte de la especificación de una función que le dice al programador que la función espera recibir un valor de cierto tipo.

También le dice al programador cómo podría tratar ese valor. Un parámetro generalmente proporciona un nombre por el cual se puede hacer referencia al valor, aunque C ++ nos permite proporcionar solo un tipo si se requiere que tengamos un parámetro particular (por ejemplo, para que coincida con una especificación de interfaz) pero no tiene la intención de usar realmente su valor.

Como ejemplo de un parámetro versus un argumento, en C # puede tener un método de clase como vacío AddTwoNumbers (int a, int b, ref int result) {result = a + b; }. En este caso, a, b, y resultado son parámetros; sabemos que AddTwoNumbers podría cambiar el valor del argumento pasado en para el parámetro de resultado (como, de hecho, lo hace). Si llamó a este método como tal, int one = 1, two = 2, respuesta = 0; someClass.AddTwoNumbers (uno, dos, ref respuesta); luego uno, dos y respuesta todos serían argumentos pasados ​​a AddTwoNumbers.

Resaltado de sintaxis

Los ejemplos de código en este libro usan los colores de resaltado de sintaxis de Visual Studio 2012 Ultimate RC.

Esto te ayudará a entender el código, pero también estarás bien leyendo esto en un libro electrónico monocromo lector.

Muestras

Las muestras para este libro C++ fueron diseñadas y desarrolladas usando Visual Studio 2012 Ultimate RC. El C ++ compilador que viene con VS 2012 incluye nuevas características del estándar de lenguaje C ++ 11 que no eran
incluido en Visual Studio 2010. En el otoño de 2012, Microsoft lanzará una versión gratuita “Express” de Visual Studio 2012, que permitirá a los desarrolladores utilizar aplicaciones de escritorio específicas de C ++ (como la consola aplicación, que usan las muestras). Hasta entonces, para hacer un uso completo de las muestras, necesitará una versión no expresada de Visual Studio 2012.

Probé muchas de las muestras en el camino usando Minimalist GNU for Windows (MinGW), por lo que debería ser una gran portabilidad del compilador cruzado. La única muestra que sé con certeza que no funciona como está escrito con el compilador de GCC que proporciona MinGW es StorageDurationSample. Hace uso de la extensión de lenguaje específica de Microsofts _declspec (hilo) para simular el almacenamiento thread_local. GCC tiene su propia extensión muy similar, y otros proveedores de compiladores también lo hacen, así que si la reemplazas con el código apropiado para el compilador que decide usar, luego debe compilar y ejecutar.

Por último, las muestras son todas muestras de consola. Elegí muestras de consola para poder evitar todo código extraño que viene con la creación y visualización de ventanas dentro de un entorno de ventanas. A ver el resultado de cualquier muestra en particular, puede establecer un punto de interrupción en la declaración de retorno en el fin de la función _pmain y luego ejecútelo usando el depurador de Visual Studio, o puede ejecutarlo usando el Comando Start Without Debugging en el menú Debug en Visual Studio (generalmente esto usa Ctrl + F5 atajo de teclado).

También debe asegurarse de que el proyecto que desea ejecutar esté configurado como inicio. proyecto. Puede lograr esto haciendo clic derecho en el nombre del proyecto en el Explorador de soluciones y luego haciendo clic izquierdo en Establecer como proyecto de inicio en el menú contextual que aparece.

C ++ 11

En 2011, el grupo de trabajo ISO / IEC adoptó una nueva versión principal del estándar de lenguaje C ++ responsable del diseño y desarrollo de C ++ como lenguaje. Cuando se compara con C ++ 98 y C ++ 03, C ++ 11 se siente como un idioma diferente. Como C ++ 11 es tan nuevo, no hay compiladores que admite cada característica única, y hay algunas que admiten menos que otras.

Me he dirigido a Visual C ++ y las características que implementa en su versión más reciente (Visual Studio 2012 RC en el momento de este escrito), aunque he mencionado algunas características que Visual C ++ no admite actualmente y que tienen señalado esto cuando sea apropiado.

Es poco probable que Visual C ++ cambie mucho entre Visual Studio 2012 RC y Visual Studio 2012 RTM. Hay planes para hacer una actualización fuera de banda, que agregará compatibilidad adicional con el lenguaje C ++ 11, algún tiempo después de que se lanza el RTM. Como no puedo predecir qué características se agregarán y no tengo cualquier conocimiento interno al respecto, en su mayoría no cubría cosas que no son compatibles con el RC.

Si tiene experiencia previa con C ++ de hace cinco años, o tal vez más, es probable que sea muy gratamente sorprendido, lo cual no quiere decir que tenga todo lo que tiene C #.

Hay características de C # y .NET que echo de menos cuando trabajo en C ++. Pero también hay características de C ++ que extraño cuando trabajo en C #. Echo de menos la simplicidad de la fundición en C # que proporciona el sistema de tipos de CLR cuando estoy trabajando en C ++ También echo de menos el conjunto completo de excepciones .NET y el IntelliSense frecuentemente mejor
que proporciona .NET. En C ++, me refiero a la documentación mucho más que en C # para averiguar cosas como qué argumento puedo y debo pasar a una función en particular, y qué valores esperar de regreso de eso.

Cuando trabajo en C #, me falta el alcance que ofrecen las diferentes duraciones de almacenamiento de C ++.

En C #, la mayoría de las cosas acaban en el montón gestionado por GC, lo que simplifica enormemente el manejo de la memoria.

Pero a veces no necesariamente quiero que una instancia de clase esté en el montón. En C #, no tengo más remedio que reescribir la clase como una estructura; mientras que en C ++, puedo elegir fácilmente entre los dos sin necesidad de cambiar la definición de la clase en sí. También extraño las funciones independientes (aunque pueden ser en su mayoría emulado con métodos estáticos en clases estáticas en C #).

También me gusta que mis programas C ++ terminen tan fuertemente
código de máquina optimizado (y por lo tanto difícil de entender) cuando los compilo, así que realmente no necesito preocuparse por intentar ofuscar mis programas si quiero que mi código permanezca en secreto (como hago con .NET, aunque hay algunas herramientas de ofuscación muy buenas por ahí).

Cada idioma se enfoca en su propio conjunto de problemas y tiene su propia historia y peculiaridades asociadas. Con suerte, encontrará en C ++ un lenguaje interesante y útil para agregar a su repertorio de programación.

Tipos fundamentales

C ++ contiene las mismas palabras clave familiares (por ejemplo, int) que reconoce de C #. Esto no es sorprendente dado que ambos son lenguajes tipo C Sin embargo, hay una posible mina terrestre que puede arrojarte a
problema.

Mientras que C # define explícitamente los tamaños de los tipos fundamentales (un corto es un entero de 16 bits, un int es un entero de 32 bits, uno largo es un entero de 64 bits, un doble es un punto flotante IEEE 754 de doble precisión de 64 bits número, etc.), C ++ no hace tales garantías.

La unidad fundamental más pequeña en C ++ es char, que solo debe estar en
lo suficientemente grande como para contener los 96 caracteres básicos que el estándar de C ++ especifica, además de cualquier otro carácter en el carácter básico de la implementación conjunto.

En teoría, alguna implementación de C ++ podría definir un char como 7 bits o
16 bits … casi todo es posible. Pero en la práctica no necesitas preocuparse demasiado por un char que no sea de 8 bits (el equivalente del tipo de byte o sbyte en C #), que es su tamaño en Visual C ++.

En C ++, char, signed char y unsigned char son tres distintos tipos. Se requiere que los tres ocupen la misma cantidad de almacenamiento en memoria. Entonces, un char en práctica está firmado o sin firmar. Si se trata de firmado o sin firmar es la implementación definida (ver la barra lateral). En Visual
C ++, el tipo de char es, por defecto, firmado. Pero puedes usar un interruptor de compilador tenerlo tratado como sin firmar en su lugar. En GCC, ya sea que esté firmado o Sin firmar depende de qué arquitectura de CPU está orientando.

Como resumen, cada lenguaje de programación con el que he trabajado ha tenido su parte de malo características-cosas que el lenguaje permite, pero cosas que generalmente conducen a problemas.

Estos problemas incluyen problemas difíciles de detectar, errores sutiles que pasan desapercibidos durante mucho tiempo, problemas de mantenimiento, legibilidad problemas, y todas las otras cosas frustrantes que agregan muchas horas al tiempo de desarrollo sin ningún beneficio. C ++ no es diferente. Cuando encontremos algo que se ajuste a esta descripción, haré todo lo posible para
llámalo. Éste es uno de esos momentos.

Las variables globales son malas Evítalos siempre que sea posible. Hay una convención común cuando se usa ellos en C ++, que es para prefijar el nombre de la variable con g_, como en el ejemplo anterior. Si bien esto ayuda a
alertarte a ti y a otros programadores sobre el hecho de que esta es una variable global, no cambia el hecho de que es una variable global, que tiene todos los problemas que describí.

Este no es un libro sobre malas prácticas de programación, así que no voy a perder tiempo explicando por qué las variables globales son malas. Todo lo que necesitas saber es esto la característica existe en C ++, pero debe evitar usarla siempre que sea posible.

El operador de resolución de alcance ‘::’

En C ++, :: es el operador de resolución de alcance. Se usa para separar espacios de nombres anidados, para separar tipos de su espacio de nombres, y para separar funciones y variables de miembros de su tipo.
Tenga en cuenta que solo se usa en la última situación cuando se realiza lo siguiente:

  • Definir una función miembro.
  • Acceder a un miembro de una clase base dentro de una definición de función miembro.
  • Acceder a una función o variable de miembro estático.
  • Asignar un valor a una variable miembro estática.
  • Obtener la dirección de una función miembro.

En otros casos, usa ya sea el. operador o el operador ->, dependiendo de si usted es acceder al miembro directamente o mediante un puntero.

Esto puede parecer complicado ya que C # solo usa el. operador para todos los fines que ::,., y -> se usan en C ++.

VER LIBRO

Compártelo