mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-01-14 13:15:59 +00:00
[c++/en,es,it,br,ru,ch] Fix forgotten namespace std:: (#2619)
This commit is contained in:
parent
30d63b3709
commit
ae16d45078
@ -456,7 +456,7 @@ void Dog::print() const
|
|||||||
|
|
||||||
Dog::~Dog()
|
Dog::~Dog()
|
||||||
{
|
{
|
||||||
cout << "Goodbye " << name << "\n";
|
std::cout << "Goodbye " << name << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -20,11 +20,11 @@ fue diseñado para
|
|||||||
- soportar programación orientada a objetos
|
- soportar programación orientada a objetos
|
||||||
- soportar programación genérica
|
- soportar programación genérica
|
||||||
|
|
||||||
Aunque su sintaxis puede ser más difícil o compleja que los nuevos lenguajes,
|
Aunque su sintaxis puede ser más difícil o compleja que los nuevos lenguajes,
|
||||||
es ampliamente utilizado, ya que compila instrucciones nativas que pueden ser
|
es ampliamente utilizado, ya que compila instrucciones nativas que pueden ser
|
||||||
directamente ejecutadas por el procesador y ofrece un estricto control sobre
|
directamente ejecutadas por el procesador y ofrece un estricto control sobre
|
||||||
el hardware (como C), mientras ofrece características de alto nivel como
|
el hardware (como C), mientras ofrece características de alto nivel como
|
||||||
genericidad, excepciones, y clases. Esta combinación de velocidad y
|
genericidad, excepciones, y clases. Esta combinación de velocidad y
|
||||||
funcionalidad hace de C ++ uno de los lenguajes de programación más utilizados.
|
funcionalidad hace de C ++ uno de los lenguajes de programación más utilizados.
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
@ -32,22 +32,22 @@ funcionalidad hace de C ++ uno de los lenguajes de programación más utilizados
|
|||||||
// Comparación con C
|
// Comparación con C
|
||||||
////////////////////
|
////////////////////
|
||||||
|
|
||||||
// C ++ es _casi_ un superconjunto de C y comparte su sintaxis básica para las
|
// C ++ es _casi_ un superconjunto de C y comparte su sintaxis básica para las
|
||||||
// declaraciones de variables, tipos primitivos y funciones.
|
// declaraciones de variables, tipos primitivos y funciones.
|
||||||
|
|
||||||
// Al igual que en C, el punto de entrada de tu programa es una función llamada
|
// Al igual que en C, el punto de entrada de tu programa es una función llamada
|
||||||
// main con un retorno de tipo entero.
|
// main con un retorno de tipo entero.
|
||||||
// Este valor sirve como código de salida del programa.
|
// Este valor sirve como código de salida del programa.
|
||||||
// Mira http://en.wikipedia.org/wiki/Exit_status para mayor información.
|
// Mira http://en.wikipedia.org/wiki/Exit_status para mayor información.
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
// Los argumentos de la línea de comandos se pasan por argc y argv de la
|
// Los argumentos de la línea de comandos se pasan por argc y argv de la
|
||||||
// misma manera que en C.
|
// misma manera que en C.
|
||||||
// argc indica el número de argumentos,
|
// argc indica el número de argumentos,
|
||||||
// y argv es un arreglo de strings de estilo C (char*)
|
// y argv es un arreglo de strings de estilo C (char*)
|
||||||
// representando los argumentos.
|
// representando los argumentos.
|
||||||
// El primer argumento es el nombre con el que el programa es llamado.
|
// El primer argumento es el nombre con el que el programa es llamado.
|
||||||
// argc y argv pueden omitirse si no te preocupan los argumentos,
|
// argc y argv pueden omitirse si no te preocupan los argumentos,
|
||||||
// dejando la definición de la función como int main ()
|
// dejando la definición de la función como int main ()
|
||||||
|
|
||||||
// Un estado de salida 0 indica éxito.
|
// Un estado de salida 0 indica éxito.
|
||||||
@ -72,7 +72,7 @@ void func(); // función que puede aceptar cualquier número de argumentos
|
|||||||
// Use nullptr en lugar de NULL en C++
|
// Use nullptr en lugar de NULL en C++
|
||||||
int* ip = nullptr;
|
int* ip = nullptr;
|
||||||
|
|
||||||
// Las cabeceras (headers) estándar de C están disponibles en C ++,
|
// Las cabeceras (headers) estándar de C están disponibles en C ++,
|
||||||
// pero tienen el prefijo "c" y no tienen sufijo .h.
|
// pero tienen el prefijo "c" y no tienen sufijo .h.
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ int main()
|
|||||||
// Argumentos de función por defecto
|
// Argumentos de función por defecto
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
|
|
||||||
// Puedes proporcionar argumentos por defecto para una función si no son
|
// Puedes proporcionar argumentos por defecto para una función si no son
|
||||||
// proporcionados por quien la llama.
|
// proporcionados por quien la llama.
|
||||||
|
|
||||||
void doSomethingWithInts(int a = 1, int b = 4)
|
void doSomethingWithInts(int a = 1, int b = 4)
|
||||||
@ -134,7 +134,7 @@ void invalidDeclaration(int a = 1, int b) // Error!
|
|||||||
// Espacios de nombre
|
// Espacios de nombre
|
||||||
/////////////////////
|
/////////////////////
|
||||||
|
|
||||||
// Espacios de nombres proporcionan ámbitos separados para variable, función y
|
// Espacios de nombres proporcionan ámbitos separados para variable, función y
|
||||||
// otras declaraciones.
|
// otras declaraciones.
|
||||||
// Los espacios de nombres se pueden anidar.
|
// Los espacios de nombres se pueden anidar.
|
||||||
|
|
||||||
@ -162,8 +162,8 @@ void foo()
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
|
||||||
// Incluye todos los símbolos del espacio de nombre Second en el ámbito
|
// Incluye todos los símbolos del espacio de nombre Second en el ámbito
|
||||||
// actual. Tenga en cuenta que simplemente foo() no funciona, ya que ahora
|
// actual. Tenga en cuenta que simplemente foo() no funciona, ya que ahora
|
||||||
// es ambigua si estamos llamando a foo en espacio de nombres Second o en
|
// es ambigua si estamos llamando a foo en espacio de nombres Second o en
|
||||||
// el nivel superior.
|
// el nivel superior.
|
||||||
using namespace Second;
|
using namespace Second;
|
||||||
@ -254,7 +254,7 @@ const string& barRef = bar; // Crea una referencia constante a bar.
|
|||||||
// modificados.
|
// modificados.
|
||||||
barRef += ". Hola!"; // Error, referencia constante no puede ser modificada.
|
barRef += ". Hola!"; // Error, referencia constante no puede ser modificada.
|
||||||
|
|
||||||
// Sidetrack: Antes de hablar más sobre referencias, hay que introducir un
|
// Sidetrack: Antes de hablar más sobre referencias, hay que introducir un
|
||||||
// concepto llamado objeto temporal. Supongamos que tenemos el siguiente código:
|
// concepto llamado objeto temporal. Supongamos que tenemos el siguiente código:
|
||||||
string tempObjectFun() { ... }
|
string tempObjectFun() { ... }
|
||||||
string retVal = tempObjectFun();
|
string retVal = tempObjectFun();
|
||||||
@ -267,16 +267,16 @@ string retVal = tempObjectFun();
|
|||||||
// El objeto devuelto se llama objeto temporal. Objetos temporales son
|
// El objeto devuelto se llama objeto temporal. Objetos temporales son
|
||||||
// creados cada vez que una función devuelve un objeto, y es destruido en el
|
// creados cada vez que una función devuelve un objeto, y es destruido en el
|
||||||
// fin de la evaluación de la expresión que encierra (Bueno, esto es lo que la
|
// fin de la evaluación de la expresión que encierra (Bueno, esto es lo que la
|
||||||
// norma dice, pero los compiladores están autorizados a cambiar este
|
// norma dice, pero los compiladores están autorizados a cambiar este
|
||||||
// comportamiento. Busca "return value optimization" para ver mas detalles).
|
// comportamiento. Busca "return value optimization" para ver mas detalles).
|
||||||
// Así que en este código:
|
// Así que en este código:
|
||||||
foo(bar(tempObjectFun()))
|
foo(bar(tempObjectFun()))
|
||||||
|
|
||||||
// Suponiendo que foo y bar existen, el objeto retornado de tempObjectFun es
|
// Suponiendo que foo y bar existen, el objeto retornado de tempObjectFun es
|
||||||
// pasado al bar, y se destruye antes de llamar foo.
|
// pasado al bar, y se destruye antes de llamar foo.
|
||||||
|
|
||||||
// Ahora, de vuelta a las referencias. La excepción a la regla "en el extremo
|
// Ahora, de vuelta a las referencias. La excepción a la regla "en el extremo
|
||||||
// de la expresión encerrada" es si un objeto temporal se une a una
|
// de la expresión encerrada" es si un objeto temporal se une a una
|
||||||
// referencia constante, en cuyo caso su vida se extiende al ámbito actual:
|
// referencia constante, en cuyo caso su vida se extiende al ámbito actual:
|
||||||
|
|
||||||
void constReferenceTempObjectFun() {
|
void constReferenceTempObjectFun() {
|
||||||
@ -287,7 +287,7 @@ void constReferenceTempObjectFun() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Otro tipo de referencia introducida en C ++ 11 es específicamente para
|
// Otro tipo de referencia introducida en C ++ 11 es específicamente para
|
||||||
// objetos temporales. No se puede tener una variable de este tipo, pero tiene
|
// objetos temporales. No se puede tener una variable de este tipo, pero tiene
|
||||||
// prioridad en resolución de sobrecarga:
|
// prioridad en resolución de sobrecarga:
|
||||||
|
|
||||||
void someFun(string& s) { ... } // Referencia regular
|
void someFun(string& s) { ... } // Referencia regular
|
||||||
@ -302,7 +302,7 @@ someFun(tempObjectFun()); // Llama la versión con referencia temporal
|
|||||||
basic_string(const basic_string& other);
|
basic_string(const basic_string& other);
|
||||||
basic_string(basic_string&& other);
|
basic_string(basic_string&& other);
|
||||||
|
|
||||||
// La idea es que si estamos construyendo una nueva cadena de un objeto temporal
|
// La idea es que si estamos construyendo una nueva cadena de un objeto temporal
|
||||||
// (que va a ser destruido pronto de todos modos), podemos tener un constructor
|
// (que va a ser destruido pronto de todos modos), podemos tener un constructor
|
||||||
// mas eficiente que "rescata" partes de esa cadena temporal. Usted verá este
|
// mas eficiente que "rescata" partes de esa cadena temporal. Usted verá este
|
||||||
// Concepto denominado "movimiento semántico".
|
// Concepto denominado "movimiento semántico".
|
||||||
@ -341,13 +341,13 @@ public:
|
|||||||
// Funciones que no modifican el estado del objeto
|
// Funciones que no modifican el estado del objeto
|
||||||
// Deben marcarse como const.
|
// Deben marcarse como const.
|
||||||
// Esto le permite llamarlas si se envia una referencia constante al objeto.
|
// Esto le permite llamarlas si se envia una referencia constante al objeto.
|
||||||
// También tenga en cuenta que las funciones deben ser declaradas
|
// También tenga en cuenta que las funciones deben ser declaradas
|
||||||
// explícitamente como _virtual_ para que sea reemplazada en las clases
|
// explícitamente como _virtual_ para que sea reemplazada en las clases
|
||||||
// derivadas.
|
// derivadas.
|
||||||
// Las funciones no son virtuales por defecto por razones de rendimiento.
|
// Las funciones no son virtuales por defecto por razones de rendimiento.
|
||||||
virtual void print() const;
|
virtual void print() const;
|
||||||
|
|
||||||
// Las funciones también se pueden definir en el interior
|
// Las funciones también se pueden definir en el interior
|
||||||
// del cuerpo de la clase.
|
// del cuerpo de la clase.
|
||||||
// Funciones definidas como tales están entre líneas automáticamente.
|
// Funciones definidas como tales están entre líneas automáticamente.
|
||||||
void bark() const { std::cout << name << " barks!\n"; }
|
void bark() const { std::cout << name << " barks!\n"; }
|
||||||
@ -358,7 +358,7 @@ public:
|
|||||||
// (mira abajo)
|
// (mira abajo)
|
||||||
// El destructor debe ser virtual si una clase es dervada desde el;
|
// El destructor debe ser virtual si una clase es dervada desde el;
|
||||||
// Si no es virtual, entonces la clase derivada destructor
|
// Si no es virtual, entonces la clase derivada destructor
|
||||||
// No será llamada si el objeto se destruye a través de una referencia de
|
// No será llamada si el objeto se destruye a través de una referencia de
|
||||||
// la clase base o puntero.
|
// la clase base o puntero.
|
||||||
virtual ~Dog();
|
virtual ~Dog();
|
||||||
|
|
||||||
@ -392,7 +392,7 @@ void Dog::print() const
|
|||||||
|
|
||||||
Dog::~Dog()
|
Dog::~Dog()
|
||||||
{
|
{
|
||||||
cout << "Adiós " << name << "\n";
|
std::cout << "Adiós " << name << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -410,7 +410,7 @@ class OwnedDog : public Dog {
|
|||||||
|
|
||||||
void setOwner(const std::string& dogsOwner);
|
void setOwner(const std::string& dogsOwner);
|
||||||
|
|
||||||
// Reemplaza el comportamiento de la función de impresión
|
// Reemplaza el comportamiento de la función de impresión
|
||||||
// de todos los OwnedDogs. Mira
|
// de todos los OwnedDogs. Mira
|
||||||
// http://en.wikipedia.org/wiki/Polymorphism_(computer_science)#Subtyping
|
// http://en.wikipedia.org/wiki/Polymorphism_(computer_science)#Subtyping
|
||||||
// Para una introducción más general si no está familiarizado con el
|
// Para una introducción más general si no está familiarizado con el
|
||||||
@ -442,7 +442,7 @@ void OwnedDog::print() const
|
|||||||
// Inicialización y sobrecarga de operadores
|
// Inicialización y sobrecarga de operadores
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
|
|
||||||
// En C ++ se puede sobrecargar el comportamiento
|
// En C ++ se puede sobrecargar el comportamiento
|
||||||
// de los operadores como +, -, *, /, etc.
|
// de los operadores como +, -, *, /, etc.
|
||||||
// Esto se hace mediante la definición de una función que es llamada
|
// Esto se hace mediante la definición de una función que es llamada
|
||||||
// cada vez que se utiliza el operador.
|
// cada vez que se utiliza el operador.
|
||||||
@ -505,14 +505,14 @@ int main () {
|
|||||||
// Plantillas (Templates)
|
// Plantillas (Templates)
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
|
|
||||||
// Las plantillas en C++ se utilizan sobre todo en la programación genérica,
|
// Las plantillas en C++ se utilizan sobre todo en la programación genérica,
|
||||||
// a pesar de que son mucho más poderoso que los constructores genéricos
|
// a pesar de que son mucho más poderoso que los constructores genéricos
|
||||||
// en otros lenguajes. Ellos también soportan especialización explícita y
|
// en otros lenguajes. Ellos también soportan especialización explícita y
|
||||||
// parcial y clases de tipo estilo funcional; de hecho, son un lenguaje
|
// parcial y clases de tipo estilo funcional; de hecho, son un lenguaje
|
||||||
// funcional Turing-completo incrustado en C ++!
|
// funcional Turing-completo incrustado en C ++!
|
||||||
|
|
||||||
// Empezamos con el tipo de programación genérica que podría estar
|
// Empezamos con el tipo de programación genérica que podría estar
|
||||||
// familiarizado.
|
// familiarizado.
|
||||||
// Para definir una clase o función que toma un parámetro de tipo:
|
// Para definir una clase o función que toma un parámetro de tipo:
|
||||||
template<class T>
|
template<class T>
|
||||||
class Box {
|
class Box {
|
||||||
@ -521,9 +521,9 @@ public:
|
|||||||
void insert(const T&) { ... }
|
void insert(const T&) { ... }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Durante la compilación, el compilador realmente genera copias de cada
|
// Durante la compilación, el compilador realmente genera copias de cada
|
||||||
// plantilla con parámetros sustituidos, por lo que la definición completa
|
// plantilla con parámetros sustituidos, por lo que la definición completa
|
||||||
// de la clase debe estar presente en cada invocación.
|
// de la clase debe estar presente en cada invocación.
|
||||||
// Es por esto que usted verá clases de plantilla definidas
|
// Es por esto que usted verá clases de plantilla definidas
|
||||||
// Enteramente en archivos de cabecera.
|
// Enteramente en archivos de cabecera.
|
||||||
|
|
||||||
@ -537,8 +537,8 @@ intBox.insert(123);
|
|||||||
Box<Box<int> > boxOfBox;
|
Box<Box<int> > boxOfBox;
|
||||||
boxOfBox.insert(intBox);
|
boxOfBox.insert(intBox);
|
||||||
|
|
||||||
// Hasta C++11, había que colocar un espacio entre los dos '>'s,
|
// Hasta C++11, había que colocar un espacio entre los dos '>'s,
|
||||||
// de lo contrario '>>' serían analizados como el operador de desplazamiento
|
// de lo contrario '>>' serían analizados como el operador de desplazamiento
|
||||||
// a la derecha.
|
// a la derecha.
|
||||||
|
|
||||||
|
|
||||||
@ -558,9 +558,9 @@ void barkThreeTimes(const T& input)
|
|||||||
input.bark();
|
input.bark();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Observe que no se especifica nada acerca de los tipos de parámetros aquí.
|
// Observe que no se especifica nada acerca de los tipos de parámetros aquí.
|
||||||
// El compilador generará y comprobará cada invocación de la plantilla,
|
// El compilador generará y comprobará cada invocación de la plantilla,
|
||||||
// por lo que la función anterior funciona con cualquier tipo "T"
|
// por lo que la función anterior funciona con cualquier tipo "T"
|
||||||
// que tenga un método 'bark' constante!
|
// que tenga un método 'bark' constante!
|
||||||
|
|
||||||
|
|
||||||
@ -574,12 +574,12 @@ void printMessage() {
|
|||||||
cout << "Aprende C++ en " << Y << " minutos!" << endl;
|
cout << "Aprende C++ en " << Y << " minutos!" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Y usted puede especializar explícitamente plantillas
|
// Y usted puede especializar explícitamente plantillas
|
||||||
// para código más eficiente.
|
// para código más eficiente.
|
||||||
// Por supuesto, la mayor parte del mundo real que utiliza una especialización
|
// Por supuesto, la mayor parte del mundo real que utiliza una especialización
|
||||||
// no son tan triviales como esta.
|
// no son tan triviales como esta.
|
||||||
// Tenga en cuenta que usted todavía tiene que declarar la función (o clase)
|
// Tenga en cuenta que usted todavía tiene que declarar la función (o clase)
|
||||||
// como plantilla incluso si ha especificado de forma explícita todos
|
// como plantilla incluso si ha especificado de forma explícita todos
|
||||||
// los parámetros.
|
// los parámetros.
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -601,7 +601,7 @@ printMessage<10>(); // Prints "Aprende C++ rapido en solo 10 minutos!"
|
|||||||
#include <exception>
|
#include <exception>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
//Todas las excepciones lanzadas dentro del bloque _try_ pueden ser
|
//Todas las excepciones lanzadas dentro del bloque _try_ pueden ser
|
||||||
// capturados por los siguientes manejadores _catch_.
|
// capturados por los siguientes manejadores _catch_.
|
||||||
try {
|
try {
|
||||||
// No asignar excepciones en el heap usando _new_.
|
// No asignar excepciones en el heap usando _new_.
|
||||||
@ -651,7 +651,7 @@ void doSomethingWithAFile(const char* filename)
|
|||||||
// (Excepciones son la mejor forma de manejar los fallos,
|
// (Excepciones son la mejor forma de manejar los fallos,
|
||||||
// pero algunos programadores, especialmente los que tienen un fondo C,
|
// pero algunos programadores, especialmente los que tienen un fondo C,
|
||||||
// estan en desacuerdo sobre la utilidad de las excepciones).
|
// estan en desacuerdo sobre la utilidad de las excepciones).
|
||||||
// Ahora tenemos que comprobar cada llamado por fallos y cerrar el manejador
|
// Ahora tenemos que comprobar cada llamado por fallos y cerrar el manejador
|
||||||
// del archivo si se ha producido un problema.
|
// del archivo si se ha producido un problema.
|
||||||
bool doSomethingWithAFile(const char* filename)
|
bool doSomethingWithAFile(const char* filename)
|
||||||
{
|
{
|
||||||
@ -716,7 +716,7 @@ void doSomethingWithAFile(const char* filename)
|
|||||||
|
|
||||||
// Compare esto con el uso de la clase de flujo de archivos de C++ (fstream)
|
// Compare esto con el uso de la clase de flujo de archivos de C++ (fstream)
|
||||||
// fstream utiliza su destructor para cerrar el archivo.
|
// fstream utiliza su destructor para cerrar el archivo.
|
||||||
// Los destructores son llamados automáticamente
|
// Los destructores son llamados automáticamente
|
||||||
// cuando un objeto queda fuera del ámbito.
|
// cuando un objeto queda fuera del ámbito.
|
||||||
void doSomethingWithAFile(const std::string& filename)
|
void doSomethingWithAFile(const std::string& filename)
|
||||||
{
|
{
|
||||||
@ -734,7 +734,7 @@ void doSomethingWithAFile(const std::string& filename)
|
|||||||
// 1. No importa lo que pase,
|
// 1. No importa lo que pase,
|
||||||
// El recurso (en este caso el manejador de archivo) será limpiado.
|
// El recurso (en este caso el manejador de archivo) será limpiado.
|
||||||
// Una vez que escribes el destructor correctamente,
|
// Una vez que escribes el destructor correctamente,
|
||||||
// Es _imposible_ olvidar cerrar el identificador y permitir
|
// Es _imposible_ olvidar cerrar el identificador y permitir
|
||||||
// fugas del recurso.
|
// fugas del recurso.
|
||||||
// 2. Tenga en cuenta que el código es mucho más limpio.
|
// 2. Tenga en cuenta que el código es mucho más limpio.
|
||||||
// El destructor se encarga de cerrar el archivo detrás de cámaras
|
// El destructor se encarga de cerrar el archivo detrás de cámaras
|
||||||
@ -743,13 +743,13 @@ void doSomethingWithAFile(const std::string& filename)
|
|||||||
// Una excepción puede ser lanzado en cualquier lugar de la función
|
// Una excepción puede ser lanzado en cualquier lugar de la función
|
||||||
// y la limpieza ocurrirá.
|
// y la limpieza ocurrirá.
|
||||||
|
|
||||||
// Todo el código idiomático C++ utiliza RAII ampliamente para todos los
|
// Todo el código idiomático C++ utiliza RAII ampliamente para todos los
|
||||||
// recursos.
|
// recursos.
|
||||||
// Otros ejemplos incluyen
|
// Otros ejemplos incluyen
|
||||||
// - Memoria usando unique_ptr y shared_ptr
|
// - Memoria usando unique_ptr y shared_ptr
|
||||||
// - Contenedores (Containers) - la biblioteca estándar linked list,
|
// - Contenedores (Containers) - la biblioteca estándar linked list,
|
||||||
// vector (es decir, array con auto-cambio de tamaño), hash maps, etc.
|
// vector (es decir, array con auto-cambio de tamaño), hash maps, etc.
|
||||||
// Destruimos todos sus contenidos de forma automática
|
// Destruimos todos sus contenidos de forma automática
|
||||||
// cuando quedan fuera del ámbito.
|
// cuando quedan fuera del ámbito.
|
||||||
// - Mutex utilizando lock_guard y unique_lock
|
// - Mutex utilizando lock_guard y unique_lock
|
||||||
|
|
||||||
@ -758,9 +758,9 @@ void doSomethingWithAFile(const std::string& filename)
|
|||||||
// Cosas divertidas
|
// Cosas divertidas
|
||||||
/////////////////////
|
/////////////////////
|
||||||
|
|
||||||
// Aspectos de C ++ que pueden sorprender a los recién llegados
|
// Aspectos de C ++ que pueden sorprender a los recién llegados
|
||||||
// (e incluso algunos veteranos).
|
// (e incluso algunos veteranos).
|
||||||
// Esta sección es, por desgracia, salvajemente incompleta;
|
// Esta sección es, por desgracia, salvajemente incompleta;
|
||||||
// C++ es uno de los lenguajes con los que mas facil te disparas en el pie.
|
// C++ es uno de los lenguajes con los que mas facil te disparas en el pie.
|
||||||
|
|
||||||
// Tu puedes sobreescribir métodos privados!
|
// Tu puedes sobreescribir métodos privados!
|
||||||
@ -788,13 +788,13 @@ pt2 = nullptr; // Establece pt2 como null.
|
|||||||
*pt = nullptr; // Esto todavía compila, a pesar de que '*pt' es un bool!
|
*pt = nullptr; // Esto todavía compila, a pesar de que '*pt' es un bool!
|
||||||
|
|
||||||
// '=' != '=' != '='!
|
// '=' != '=' != '='!
|
||||||
// Llama Foo::Foo(const Foo&) o alguna variante (mira movimientos semanticos)
|
// Llama Foo::Foo(const Foo&) o alguna variante (mira movimientos semanticos)
|
||||||
// copia del constructor.
|
// copia del constructor.
|
||||||
Foo f2;
|
Foo f2;
|
||||||
Foo f1 = f2;
|
Foo f1 = f2;
|
||||||
|
|
||||||
// Llama Foo::Foo(const Foo&) o variante, pero solo copia el 'Foo' parte de
|
// Llama Foo::Foo(const Foo&) o variante, pero solo copia el 'Foo' parte de
|
||||||
// 'fooSub'. Cualquier miembro extra de 'fooSub' se descarta. Este
|
// 'fooSub'. Cualquier miembro extra de 'fooSub' se descarta. Este
|
||||||
// comportamiento horrible se llama "Corte de objetos."
|
// comportamiento horrible se llama "Corte de objetos."
|
||||||
FooSub fooSub;
|
FooSub fooSub;
|
||||||
Foo f1 = fooSub;
|
Foo f1 = fooSub;
|
||||||
@ -809,13 +809,13 @@ class Foo { ... };
|
|||||||
vector<Foo> v;
|
vector<Foo> v;
|
||||||
for (int i = 0; i < 10; ++i)
|
for (int i = 0; i < 10; ++i)
|
||||||
v.push_back(Foo());
|
v.push_back(Foo());
|
||||||
// La siguiente línea establece el tamaño de v en 0,
|
// La siguiente línea establece el tamaño de v en 0,
|
||||||
// pero los destructores no son llamados y los recursos no se liberan!
|
// pero los destructores no son llamados y los recursos no se liberan!
|
||||||
|
|
||||||
v.empty();
|
v.empty();
|
||||||
v.push_back(Foo()); // Nuevo valor se copia en el primer Foo que insertamos
|
v.push_back(Foo()); // Nuevo valor se copia en el primer Foo que insertamos
|
||||||
|
|
||||||
// En verdad destruye todos los valores en v.
|
// En verdad destruye todos los valores en v.
|
||||||
// Consulta la sección acerca de los objetos temporales para la
|
// Consulta la sección acerca de los objetos temporales para la
|
||||||
// explicación de por qué esto funciona.
|
// explicación de por qué esto funciona.
|
||||||
v.swap(vector<Foo>());
|
v.swap(vector<Foo>());
|
||||||
|
@ -461,7 +461,7 @@ void Cane::print() const
|
|||||||
|
|
||||||
Cane::~Cane()
|
Cane::~Cane()
|
||||||
{
|
{
|
||||||
cout << "Ciao ciao " << nome << "\n";
|
std::cout << "Ciao ciao " << nome << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -647,7 +647,7 @@ void stampaMessaggio<10>() {
|
|||||||
|
|
||||||
printMessage<20>(); // Stampa "impara il C++ in 20 minuti!"
|
printMessage<20>(); // Stampa "impara il C++ in 20 minuti!"
|
||||||
printMessage<10>(); // Stampa "Impara il C++ più velocemente in soli 10 minuti!"
|
printMessage<10>(); // Stampa "Impara il C++ più velocemente in soli 10 minuti!"
|
||||||
|
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
// Gestione delle eccezioni
|
// Gestione delle eccezioni
|
||||||
///////////////////////////
|
///////////////////////////
|
||||||
@ -658,7 +658,7 @@ printMessage<10>(); // Stampa "Impara il C++ più velocemente in soli 10 minuti
|
|||||||
#include <exception>
|
#include <exception>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
// Tutte le eccezioni lanciate all'interno del blocco _try_ possono essere catturate dai successivi
|
// Tutte le eccezioni lanciate all'interno del blocco _try_ possono essere catturate dai successivi
|
||||||
// handlers _catch_.
|
// handlers _catch_.
|
||||||
try {
|
try {
|
||||||
// Non allocare eccezioni nello heap usando _new_.
|
// Non allocare eccezioni nello heap usando _new_.
|
||||||
|
@ -19,9 +19,9 @@ foi concebida para
|
|||||||
- suportar programação genérica
|
- suportar programação genérica
|
||||||
|
|
||||||
Embora sua sintaxe pode ser mais difícil ou complexa do que as linguagens mais
|
Embora sua sintaxe pode ser mais difícil ou complexa do que as linguagens mais
|
||||||
recentes, C++ é amplamente utilizado porque compila para instruções nativas que
|
recentes, C++ é amplamente utilizado porque compila para instruções nativas que
|
||||||
podem ser executadas diretamente pelo processador e oferece um controlo rígido sobre hardware (como C), enquanto oferece recursos de alto nível, como os
|
podem ser executadas diretamente pelo processador e oferece um controlo rígido sobre hardware (como C), enquanto oferece recursos de alto nível, como os
|
||||||
genéricos, exceções e classes. Esta combinação de velocidade e funcionalidade
|
genéricos, exceções e classes. Esta combinação de velocidade e funcionalidade
|
||||||
faz C++ uma das linguagens de programação mais utilizadas.
|
faz C++ uma das linguagens de programação mais utilizadas.
|
||||||
|
|
||||||
```c++
|
```c++
|
||||||
@ -33,7 +33,7 @@ faz C++ uma das linguagens de programação mais utilizadas.
|
|||||||
// declarações de variáveis, tipos primitivos, e funções. No entanto, C++ varia
|
// declarações de variáveis, tipos primitivos, e funções. No entanto, C++ varia
|
||||||
// em algumas das seguintes maneiras:
|
// em algumas das seguintes maneiras:
|
||||||
|
|
||||||
// A função main() em C++ deve retornar um int, embora void main() é aceita
|
// A função main() em C++ deve retornar um int, embora void main() é aceita
|
||||||
// pela maioria dos compiladores (gcc, bumbum, etc.)
|
// pela maioria dos compiladores (gcc, bumbum, etc.)
|
||||||
// Este valor serve como o status de saída do programa.
|
// Este valor serve como o status de saída do programa.
|
||||||
// Veja http://en.wikipedia.org/wiki/Exit_status para mais informações.
|
// Veja http://en.wikipedia.org/wiki/Exit_status para mais informações.
|
||||||
@ -105,7 +105,7 @@ int main()
|
|||||||
// Parâmetros padrão de função
|
// Parâmetros padrão de função
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
|
|
||||||
// Você pode fornecer argumentos padrões para uma função se eles não são
|
// Você pode fornecer argumentos padrões para uma função se eles não são
|
||||||
// fornecidos pelo chamador.
|
// fornecidos pelo chamador.
|
||||||
|
|
||||||
void doSomethingWithInts(int a = 1, int b = 4)
|
void doSomethingWithInts(int a = 1, int b = 4)
|
||||||
@ -157,7 +157,7 @@ void foo()
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
// Assuma que tudo é do namespace "Second" a menos que especificado de
|
// Assuma que tudo é do namespace "Second" a menos que especificado de
|
||||||
// outra forma.
|
// outra forma.
|
||||||
using namespace Second;
|
using namespace Second;
|
||||||
|
|
||||||
@ -222,7 +222,7 @@ cout << myString; // "Hello Dog"
|
|||||||
|
|
||||||
// Além de indicadores como os de C, C++ têm _referências_. Esses são tipos de
|
// Além de indicadores como os de C, C++ têm _referências_. Esses são tipos de
|
||||||
// ponteiro que não pode ser reatribuída uma vez definidos e não pode ser nulo.
|
// ponteiro que não pode ser reatribuída uma vez definidos e não pode ser nulo.
|
||||||
// Eles também têm a mesma sintaxe que a própria variável: Não * é necessário
|
// Eles também têm a mesma sintaxe que a própria variável: Não * é necessário
|
||||||
// para _dereferencing_ e & (endereço de) não é usado para atribuição.
|
// para _dereferencing_ e & (endereço de) não é usado para atribuição.
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -258,7 +258,7 @@ class Dog {
|
|||||||
std::string name;
|
std::string name;
|
||||||
int weight;
|
int weight;
|
||||||
|
|
||||||
// Todos os membros a seguir este são públicos até que "private:" ou
|
// Todos os membros a seguir este são públicos até que "private:" ou
|
||||||
// "protected:" é encontrado.
|
// "protected:" é encontrado.
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -274,13 +274,13 @@ public:
|
|||||||
|
|
||||||
void setWeight(int dogsWeight);
|
void setWeight(int dogsWeight);
|
||||||
|
|
||||||
// Funções que não modificam o estado do objecto devem ser marcadas como
|
// Funções que não modificam o estado do objecto devem ser marcadas como
|
||||||
// const. Isso permite que você chamá-los se for dada uma referência const
|
// const. Isso permite que você chamá-los se for dada uma referência const
|
||||||
// para o objeto. Além disso, observe as funções devem ser explicitamente
|
// para o objeto. Além disso, observe as funções devem ser explicitamente
|
||||||
// declarados como _virtual_, a fim de ser substituídas em classes
|
// declarados como _virtual_, a fim de ser substituídas em classes
|
||||||
// derivadas. As funções não são virtuais por padrão por razões de
|
// derivadas. As funções não são virtuais por padrão por razões de
|
||||||
// performance.
|
// performance.
|
||||||
|
|
||||||
virtual void print() const;
|
virtual void print() const;
|
||||||
|
|
||||||
// As funções também podem ser definidas no interior do corpo da classe.
|
// As funções também podem ser definidas no interior do corpo da classe.
|
||||||
@ -291,7 +291,7 @@ public:
|
|||||||
// Estes são chamados quando um objeto é excluído ou fica fora do escopo.
|
// Estes são chamados quando um objeto é excluído ou fica fora do escopo.
|
||||||
// Isto permite paradigmas poderosos, como RAII
|
// Isto permite paradigmas poderosos, como RAII
|
||||||
// (veja abaixo)
|
// (veja abaixo)
|
||||||
// Destruidores devem ser virtual para permitir que as classes de ser
|
// Destruidores devem ser virtual para permitir que as classes de ser
|
||||||
// derivada desta.
|
// derivada desta.
|
||||||
virtual ~Dog();
|
virtual ~Dog();
|
||||||
|
|
||||||
@ -323,7 +323,7 @@ void Dog::print() const
|
|||||||
|
|
||||||
void Dog::~Dog()
|
void Dog::~Dog()
|
||||||
{
|
{
|
||||||
cout << "Goodbye " << name << "\n";
|
std::cout << "Goodbye " << name << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -343,8 +343,8 @@ class OwnedDog : public Dog {
|
|||||||
|
|
||||||
// Substituir o comportamento da função de impressão de todas OwnedDogs.
|
// Substituir o comportamento da função de impressão de todas OwnedDogs.
|
||||||
// Ver http://en.wikipedia.org/wiki/Polymorphism_(computer_science)#Subtyping
|
// Ver http://en.wikipedia.org/wiki/Polymorphism_(computer_science)#Subtyping
|
||||||
// Para uma introdução mais geral, se você não estiver familiarizado com o
|
// Para uma introdução mais geral, se você não estiver familiarizado com o
|
||||||
// polimorfismo subtipo. A palavra-chave override é opcional, mas torna-se
|
// polimorfismo subtipo. A palavra-chave override é opcional, mas torna-se
|
||||||
// na verdade você está substituindo o método em uma classe base.
|
// na verdade você está substituindo o método em uma classe base.
|
||||||
void print() const override;
|
void print() const override;
|
||||||
|
|
||||||
@ -371,8 +371,8 @@ void OwnedDog::print() const
|
|||||||
// Inicialização e Sobrecarga de Operadores
|
// Inicialização e Sobrecarga de Operadores
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
|
|
||||||
// Em C ++, você pode sobrecarregar o comportamento dos operadores, tais como
|
// Em C ++, você pode sobrecarregar o comportamento dos operadores, tais como
|
||||||
// +, -, *, /, etc. Isto é feito através da definição de uma função que é
|
// +, -, *, /, etc. Isto é feito através da definição de uma função que é
|
||||||
// chamado sempre que o operador é usado.
|
// chamado sempre que o operador é usado.
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@ -438,7 +438,7 @@ int main () {
|
|||||||
// mas qualquer tipo pode ser jogado como uma exceção
|
// mas qualquer tipo pode ser jogado como uma exceção
|
||||||
#include <exception>
|
#include <exception>
|
||||||
|
|
||||||
// Todas as exceções lançadas dentro do bloco try pode ser capturado por
|
// Todas as exceções lançadas dentro do bloco try pode ser capturado por
|
||||||
// manipuladores de captura subseqüentes
|
// manipuladores de captura subseqüentes
|
||||||
try {
|
try {
|
||||||
// Não aloca exceções no heap usando _new_.
|
// Não aloca exceções no heap usando _new_.
|
||||||
@ -460,7 +460,7 @@ catch (const std::exception& ex)
|
|||||||
///////
|
///////
|
||||||
|
|
||||||
// RAII significa alocação de recursos é de inicialização.
|
// RAII significa alocação de recursos é de inicialização.
|
||||||
// Muitas vezes, é considerado o paradigma mais poderoso em C++, e é o
|
// Muitas vezes, é considerado o paradigma mais poderoso em C++, e é o
|
||||||
// conceito simples que um construtor para um objeto adquire recursos daquele
|
// conceito simples que um construtor para um objeto adquire recursos daquele
|
||||||
// objeto e o destruidor liberá-los.
|
// objeto e o destruidor liberá-los.
|
||||||
|
|
||||||
@ -479,11 +479,11 @@ void doSomethingWithAFile(const char* filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Infelizmente, as coisas são levemente complicadas para tratamento de erros.
|
// Infelizmente, as coisas são levemente complicadas para tratamento de erros.
|
||||||
// Suponha que fopen pode falhar, e que doSomethingWithTheFile e
|
// Suponha que fopen pode falhar, e que doSomethingWithTheFile e
|
||||||
// doSomethingElseWithIt retornam códigos de erro se eles falharem. (As
|
// doSomethingElseWithIt retornam códigos de erro se eles falharem. (As
|
||||||
// exceções são a forma preferida de lidar com o fracasso, mas alguns
|
// exceções são a forma preferida de lidar com o fracasso, mas alguns
|
||||||
// programadores, especialmente aqueles com um conhecimento em C, discordam
|
// programadores, especialmente aqueles com um conhecimento em C, discordam
|
||||||
// sobre a utilidade de exceções). Agora temos que verificar cada chamada para
|
// sobre a utilidade de exceções). Agora temos que verificar cada chamada para
|
||||||
// o fracasso e fechar o identificador de arquivo se ocorreu um problema.
|
// o fracasso e fechar o identificador de arquivo se ocorreu um problema.
|
||||||
|
|
||||||
bool doSomethingWithAFile(const char* filename)
|
bool doSomethingWithAFile(const char* filename)
|
||||||
@ -609,7 +609,7 @@ h=sum<double>(f,g);
|
|||||||
```
|
```
|
||||||
Leitura Adicional:
|
Leitura Adicional:
|
||||||
|
|
||||||
Uma referência atualizada da linguagem pode ser encontrada em
|
Uma referência atualizada da linguagem pode ser encontrada em
|
||||||
<http://cppreference.com/w/cpp>
|
<http://cppreference.com/w/cpp>
|
||||||
|
|
||||||
Uma fonte adicional pode ser encontrada em <http://cplusplus.com>
|
Uma fonte adicional pode ser encontrada em <http://cplusplus.com>
|
||||||
|
@ -304,7 +304,7 @@ someFun(tempObjectFun()); // Выполняет версию с временн
|
|||||||
basic_string(const basic_string& other);
|
basic_string(const basic_string& other);
|
||||||
basic_string(basic_string&& other);
|
basic_string(basic_string&& other);
|
||||||
|
|
||||||
// Идея в том, что если мы конструируем новую строку из временного объекта (который
|
// Идея в том, что если мы конструируем новую строку из временного объекта (который
|
||||||
// так или иначе будет уничтожен), мы можем использовать более эффективный конструктор,
|
// так или иначе будет уничтожен), мы можем использовать более эффективный конструктор,
|
||||||
// который "спасает" части этой временной строки. Эта концепция была названа
|
// который "спасает" части этой временной строки. Эта концепция была названа
|
||||||
// "move semantics".
|
// "move semantics".
|
||||||
@ -329,7 +329,7 @@ ECarTypes GetPreferredCarType()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// На момент выхода C++11 есть простой способ назначения типа перечисления, что
|
// На момент выхода C++11 есть простой способ назначения типа перечисления, что
|
||||||
// полезно в случае сериализации данных и преобразований между конечным типом и
|
// полезно в случае сериализации данных и преобразований между конечным типом и
|
||||||
// соответствующими константами.
|
// соответствующими константами.
|
||||||
enum ECarTypes : uint8_t
|
enum ECarTypes : uint8_t
|
||||||
{
|
{
|
||||||
@ -453,7 +453,7 @@ void Dog::print() const
|
|||||||
|
|
||||||
Dog::~Dog()
|
Dog::~Dog()
|
||||||
{
|
{
|
||||||
cout << "Goodbye " << name << "\n";
|
std::cout << "Goodbye " << name << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -521,7 +521,7 @@ public:
|
|||||||
// по умолчанию (0, 0)
|
// по умолчанию (0, 0)
|
||||||
Point() { };
|
Point() { };
|
||||||
|
|
||||||
// Следующий синтаксис известен как список инициализации и является верным способом
|
// Следующий синтаксис известен как список инициализации и является верным способом
|
||||||
// инициализировать значения членов класса.
|
// инициализировать значения членов класса.
|
||||||
Point (double a, double b) :
|
Point (double a, double b) :
|
||||||
x(a),
|
x(a),
|
||||||
@ -793,7 +793,7 @@ void doSomethingWithAFile(const std::string& filename)
|
|||||||
// Весь идиоматический код на С++ широко использует RAII для всех ресурсов.
|
// Весь идиоматический код на С++ широко использует RAII для всех ресурсов.
|
||||||
// Дополнительные примеры включат:
|
// Дополнительные примеры включат:
|
||||||
// - Использование памяти unique_ptr и shared_ptr
|
// - Использование памяти unique_ptr и shared_ptr
|
||||||
// - Контейнеры - стандартная библиотека связанных списков, векторы
|
// - Контейнеры - стандартная библиотека связанных списков, векторы
|
||||||
// (т.е. самоизменяемые массивы), хэш-таблицы и все остальное автоматически
|
// (т.е. самоизменяемые массивы), хэш-таблицы и все остальное автоматически
|
||||||
// уничтожается сразу же, когда выходит за пределы области видимости.
|
// уничтожается сразу же, когда выходит за пределы области видимости.
|
||||||
// - Ипользование мьютексов lock_guard и unique_lock
|
// - Ипользование мьютексов lock_guard и unique_lock
|
||||||
|
@ -315,7 +315,7 @@ void Dog::print() const
|
|||||||
|
|
||||||
void Dog::~Dog()
|
void Dog::~Dog()
|
||||||
{
|
{
|
||||||
cout << "Goodbye " << name << "\n";
|
std::cout << "Goodbye " << name << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
Loading…
Reference in New Issue
Block a user