Introducción a C++

Samsung Research Tijuana
Tipos fundamentales
Enteros
| Tipo | Tamaño mínimo |
|---|---|
| bool | 1 byte |
| char | 1 byte |
| short | 2 bytes |
| int | 4 bytes |
| long | 8 bytes |
| long long | 8 bytes |
Flotantes
| Tipo | Precisión | Tamaño mínimo |
|---|---|---|
| float | 7 dígitos | 4 bytes |
| double | 15 dígitos | 8 bytes |
| long double | 15 dígitos | 8 bytes |
Caracteres
| Tipo | Tamaño minimo | Codificación |
|---|---|---|
| char | 1 byte | UTF-8 |
| wchar_t | 2 bytes | - |
| char16_t | 2 bytes | UTF-16 |
| char32_t | 4 bytes | UTF-32 |
Tipos compuestos
Referencias
#include <iostream>
void printI(const int &i)
{
std::cout << "i = " << i << std::endl;
}
void incI(int &i) { ++i; }
int main()
{
int i = 0;
int &err; /* Error: Una referencia siempre debe ser inicializada */
int &ri1 = i; /* ri1 es una referencia a i */
int &ri2 = ri1; /* ri2 es una referencia a i */
incI(i);
printI(i); /* i = 1 */
incI(ri1);
printI(ri1); /* i = 2 */
printI(i); /* i = 2 */
incI(ri2);
printI(ri2); /* i = 3 */
printI(i); /* i = 3 */
incI(6); /* Error: No se puede crear una referencia a un objeto temporal, */
printI(6); /* a menos que se trate de una referencia constante. */
return 0;
}Apuntadores
#include <iostream>
void printI(const int *i) { std::cout << "i = " << *i << std::endl; }
void incI(int *i) { ++(*i); }
int main()
{
int i = 0;
int *uptr; /* Apuntador no inicializado */
int *pi1 = &i; /* pi1 es un apuntador a i */
int *pi2 = pi1; /* pi2 es un apuntador a i */
printI(uptr); /* Error: Acceso invalido de memoria. */
incI(i); /* Error: i no es de tipo apuntador */
incI(&i); /* &i regresa un apuntador a la direccion de i */
printI(&i); /* i = 1 */
incI(pi1);
printI(pi1); /* i = 2 */
printI(&i); /* i = 2 */
incI(pi2);
printI(pi2); /* i = 3 */
printI(&i); /* i = 3 */
incI(6); /* Error: No se puede crear un apuntador a un objeto temporal, */
printI(6);
return 0;
}Literales
/* Booleanos */
auto si = true; /* bool */
auto no = false; /* bool */
/* Caracteres */
auto u8 = 'a'; /* char */
auto u16 = u'a'; /* char16_t (Unicode 16) */
auto u32 = U'a'; /* char32_t (Unicode 32) */
auto wc = L'a'; /* wchar_t */
auto u8s = u8"Hola"; /* Cadena con codificación UTF-8 */
/* Enteros */
auto dec = 20; /* int con valor decimal de 20 */
auto oct = 024; /* int con valor octal de 24 (decimal 20) */
auto hex = 0x14; /* int con valor hexadecimal de 14 (decimal 20) */
auto x = 20u; /* unsigned int */
auto y = 20l; /* long */
auto z = 20ll; /* long long */
/* Flotantes */
auto d = 20.0; /* double */
auto f = 20.0f; /* float */
auto ld = 20.0l; /* long double */
/* Apuntadores */
int *x = nullptr; /* nullptr indica que un apuntador es nulo. */Clases
class ISerializable
{
protected:
virtual char[] serialize() = 0;
virtual char[] deserialize() = 0;
};
class DatabaseModel
{
protected:
DatabaseModel();
DatabaseConnection mDatabase;
};#include <string>
class Speaker
: public DatabaseModel, public ISerializable
{
public:
/* Constructor */
Speaker()
: DatabaseModel(), /* Constructor clase base */
mId(0), mModel(""), mBrand("") {}
unsigned int id() { return mId; }
std::string model() { return mModel; }
std::string brand() { return mBrand; }
void setId(unsigned int id) { mId = id; }
void setModel(std::string model) { mModel = model; }
void setBrand(std::string brand) { mBrand = brand; }
void saveChanges() { mDatabase.save(this); }
private:
unsigned int id mId;
std::string mModel;
std::string mBrand;
protected:
char[] serialize() { /* Codigo de serializacion */ }
char[] deserialize() { /* Codigo de deserializacion */ }
};Calificadores y Especificadores
Calificadores: const
int main()
{
int number = 0;
const int constNumber1 = 0;
int const constNumber2 = 0;
const int constNumberErr; /* Error: n4 debe ser inicializado */
number = 100;
constNumber1 = 100; /* Error: No se puede asignar a const */
constNumber1 = constNumber2; /* Error: No se puede asignar a const */
const int &constTempRef = 1;
const int &constNumbRef = number;
int &numbReferenceErr = constNumber1; /* Error: No se puede convertir. */
const int &constNumbRef2 = constNumber1;
const int *numberPtr = &number;
const int * const numberPtr2 = &number;
int *constNumberPtrErr = &constNumber1; /* Error: No se puede convertir. */
const int* constNumbPtr = &constNumber1;
*numberPtr = 5; /* Error: El contenido de numberPtr es const */
numberPtr = new int(0);
numberPtr2 = new int(5); /* Error: El apuntador numberPtr2 es const */
}Calificadores: volatile
#include <iostream>
int main()
{
for (int x = 0; i < 10; ++i)
{
volatile int a = x; /* Evita que el compilador optimize a */
std::cout << a << std::endl;
}
return 0;
}Calificadores: mutable
#include <iostream>
#include <string>
class Foo
{
public:
Foo() : mToStringCtr(0) {}
std::string name() const
{
mName = "Foo"; /* Error: No se pueden modificar miembros en una funcion const */
return mName;
}
std::string toString() const
{
++mToStringCtr; /* Es posible modificar por que es una variable mutable */
return "Foo";
}
private:
std::string mName;
mutable unsigned int mToStringCtr;
};int i = 0;Introduccion_a_cpp
By Victor Romero
Introduccion_a_cpp
Conceptos básicos de C++
- 819