Вы находитесь на странице: 1из 4

Definición de apuntador

Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y asocia el
nombre de ´está a la dirección de memoria desde donde comienzan los datos de esa variable. Las
direcciones de memoria se suelen describir como números en hexadecimal. Un apuntador es una
variable cuyo valor es la dirección de memoria de otra variable. Se dice que un apuntador
“apunta” a la variable cuyo valor se almacena a partir de la dirección de memoria que contiene el
apuntador. Por ejemplo, si un apuntador p almacena la dirección de una variable x, se dice que “p
apunta a x”.

Referenciación
La referenciación es la obtención de la dirección de una variable. En C y C++ esto se hace a través
del operador ‘&’, aplicado a la variable a la cual se desea saber su dirección. Nótese que se trata
de un operador unario

Declaración de apuntadores

Para declarar un apuntador se especifica el tipo de dato al que apunta, el


operador ‘*’, y el nombre del apuntador. La sintaxis es la siguiente:

Complemento a Uno

El complemento a uno de un número binario es una operación matemática muy


importante en el campo de la computación, ya que nos permite obtener la
representación binaria de números negativos. Se obtiene al cambiar cada uno de
los dígitos del número binario N por su complementario, esto es, cambiar los
unos por ceros y los ceros por unos.

Complemento a dos
Matrices
Una matriz es un vector de vectores o un también llamado array bidimensional. La manera de
declarar una matriz es C++ es similar a un vector:

int matrix[rows][cols];
int es el tipo de dato, matrix es el nombre del todo el conjunto de datos y debo de especificar el
numero de filas y columnas.

Las matrices también pueden ser de distintos tipos de datos como char, float, double, etc. Las
matrices en C++ se almacenan al igual que los vectores en posiciones consecutivas de memoria.

Usualmente uno se hace la idea que una matriz es como un tablero, pero internamente el manejo
es como su definición lo indica, un vector de vectores, es decir, los vectores están uno detrás del
otro juntos.

La forma de acceder a los elementos de la matriz es utilizando su nombre e indicando los 2


subíndices que van en los corchetes.

Si coloco int matriz[2][3] = 10; estoy asignando al cuarto elemento de la tercera fila el valor 10.

No olvidar que tanto filas como columnas se enumeran a partir de 0. Bueno y para recorrer una
matriz podemos usar igualmente un bucle. En este caso usando 2 for:

for(int i = 0; i < rows; i++) {


for(int j = 0; j < cols; j++) {
matrix[i][j] = i % j;
}
}
Matrices y Apuntadores
Supongamos que declaro una matriz int m[5][5] Como dijimos anteriormente, el nombre o
identificador de un vector es un puntero al primer elemento del vector.

En el caso de matrices el nombre de la matriz, en este ejemplo v, es un puntero que apunta al


primer elemento del primer vector de la matriz.

Entonces m es un doble puntero.m es igual a &m[0] que es igual a la direccion de &m[0][0].

Si declaramos un puntero int *pm y luego igualamos pm = m, p ahora puede desplazarse por los
valores de m. *p; // contenido de m[0], el cual apunta al primer elemento de ese vector, es decir,
m[0][0]

También puedo referirme a los contenidos con aritmética de punteros:

/* desplazo una posición a p, se refiere al contenido de m[1],


el cual apunta al primer elemento de ese vector, es decir, m[1][0] */
*(p + 1);

/* desplazo una posición en el vector principal y este a su vez se


desplaza una posición en ese vector,
es decir, me refiero al contenido de m[1][1];*/
*(*(p + 1) + 1);

p[2][4] = 20; // asigno el valor 20 a la posición 2,4 de la matriz


*(*(p + 2) + 4) = 20 // es lo mismo que la asignación anterior
*(pm[2] + 4) = 20 // también lo mismo
// En conclusión:
p[i][j] = *(*(p + i) + j) = *(pm[i] + j)

Matrices Dinámicas
Para crear una matriz dinámica debemos de crear un doble puntero int **pm y samos al igual que
los vectores el operador new para reservar memoria y delete para liberar. Primero tenemos que
crear el vector que contendrá a otros vectores especificando el número de vectores que tendrá
este vector principal. Ejem:

pm = new int* [rows]; // creo el vector de punteros principal


for(int i = 0; i < rows; i++) {
pm[i] = new int[cols]; // para crear los vectores dentro del vector
principal
}
Ahora sí veamos un simple programa que crea una matriz dinámica, asigna valores, muestra el
contenido de cada uno de los elementos los elementos, así como sus direcciones de memoria.

COMPLEMENTO PROGRAMA QUE COMPILE

Clases Anidadas

La potencia de abstracción de una clase se puede incrementar incluyendo otras declaraciones de


clase. Una clase declarada en el interior de otra se denomina clase anidada, y se puede considerar
como una clase miembro.

El identificador de una clase anidada está sujeto a las mismas reglas de acceso que los restantes
miembros. Si una clase anidada se declara en la sección private de la clase circundante, la clase
anidada será utilizable sólo por los miembros datos de la clase que la circunde. La clase que
encierra puede acceder al nombre de la clase anidada sin resolución de ámbito. Si un nombre de
una clase anidada es accesible a una clase o función que no la circunda, se debe aplicar el
operador ::.

class externa

{ public:

class interna {

public:int x; };

};

void main() {

externa::interna valor;

int v=valor.x;

}
Clases Amigas

Herencia de Clases

La herencia facilita la creación de objetos a partir de otros ya existentes e implica que una subclase
obtiene todo el comportamiento (métodos) y eventualmente los atributos (variables) de su
superclase.

Es la relación entre una clase general y otra clase más específica. Por ejemplo: Si declaramos una
clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase
texto, son automáticamente heredados por la subclase párrafo.

La herencia es uno de los mecanismos de los lenguajes de programación orientada a objetos


basados en clases, por medio del cual una clase se deriva de otra de manera que extiende su
funcionalidad. La clase de la que se hereda se suele denominar clase base, clase padre, superclase,
clase ancestro (el vocabulario que se utiliza suele depender en gran medida del lenguaje de
programación).

Вам также может понравиться