Expresión lambda en C++

C++ 11 introdujo la expresión lambda para permitirnos escribir una función en línea que se puede usar para fragmentos cortos de código que no se van a reutilizar y que no vale la pena nombrar. En su forma más simple, la expresión lambda se puede definir de la siguiente manera:  [ capture clause ] (parameters) … Continue reading «Expresión lambda en C++»

Qué sucede cuando se llama a una función virtual dentro de una función no virtual en C++

Prediga la salida del siguiente programa C++ simple sin ninguna función virtual. #include <iostream> using namespace std;    class Base { public:     void print()     {         cout << «Base class print function \n»;     }     void invoke()     {         cout << «Base class invoke function \n»;         this -> print();     } };    class Derived: public Base { public: … Continue reading «Qué sucede cuando se llama a una función virtual dentro de una función no virtual en C++»

¿Pueden las funciones virtuales ser privadas en C++?

Una función virtual puede ser privada ya que C++ tiene control de acceso, pero no control de visibilidad. Como se mencionó, las funciones virtuales pueden ser anuladas por la clase derivada, pero en todas las circunstancias solo se llamarán dentro de la clase base. Ejemplo: C++ // C++ program to demonstrate how a // virtual … Continue reading «¿Pueden las funciones virtuales ser privadas en C++?»

Salida del programa C++ | Conjunto 16

Prediga la salida de los siguientes programas C++. Pregunta 1 #include<iostream> using namespace std;    class Base  { public:     int fun()      { cout << «Base::fun() called»; }     int fun(int i) { cout << «Base::fun(int i) called»; } };    class Derived: public Base  { public:     int fun(char x)   { cout << «Derived::fun(char ) called»; } … Continue reading «Salida del programa C++ | Conjunto 16»

¿Por qué el tamaño de una clase vacía no es cero en C++?

Cuando se introdujo la estructura en C, no existía el concepto de Objetos en ese momento. Entonces, de acuerdo con el estándar C, se decidió mantener el tamaño de la estructura vacía en cero.  En C++, el tamaño de una estructura/clase vacía es de un byte para llamar a una función, al menos la estructura/clase … Continue reading «¿Por qué el tamaño de una clase vacía no es cero en C++?»

Algunos datos interesantes sobre las funciones miembro estáticas en C++

1) las funciones miembro estáticas no tienen este puntero . Por ejemplo, el siguiente programa falla en la compilación con el error «`this’ no está disponible para las funciones de miembros estáticos» CPP #include<iostream> class Test {         static Test * fun() {      return this; // compiler error    } };    int main() {    getchar();    return 0; … Continue reading «Algunos datos interesantes sobre las funciones miembro estáticas en C++»

Preincremento (o predecremento) con referencia al valor L en C++

Requisito previo: Pre-incremento y post-incremento en C/C++ En C++, el preincremento (o predecremento) se puede usar como valor l , pero el posincremento (o posdecremento) no se puede usar como valor l.  Por ejemplo, el siguiente programa imprime a = 20 (++a se usa como valor l)  El valor l no es más que la … Continue reading «Preincremento (o predecremento) con referencia al valor L en C++»

¿Pueden las referencias referirse a una ubicación no válida en C++?

Variables de referencia: puede crear un segundo nombre para una variable en C++, que puede usar para leer o editar los datos originales contenidos en esa variable. Si bien esto puede parecer poco atractivo al principio, declarar una referencia y asignarle una variable le permite tratar la referencia como si fuera la variable original con … Continue reading «¿Pueden las referencias referirse a una ubicación no válida en C++?»

límite_inferior en C++

Plantillas lower_bound() :  Sintaxis 1:  ForwardIterator lower_bound (ForwardIterator primero, ForwardIterator último, const T& val); Sintaxis 2:  ForwardIterator lower_bound (ForwardIterator primero, ForwardIterator último, const T& val, Compare comp);   Parámetros: Los métodos anteriores aceptan los siguientes parámetros.   primero, último: el rango utilizado es [primero, último), que contiene todos los elementos entre primero y último, incluido el elemento señalado … Continue reading «límite_inferior en C++»

max_element en C++

Tenemos std::max para encontrar un máximo de 2 o más elementos, pero ¿qué pasa si queremos encontrar el elemento más grande en una array, vector, lista o en una subsección? Para cumplir con este propósito, tenemos std::max_element en C++. std::max_element se define dentro del archivo de encabezado y devuelve un iterador que apunta al elemento … Continue reading «max_element en C++»