Vous êtes sur la page 1sur 88

Programacin con C / C++

ITESM, campus Guadalajara Octubre 2004 Mcs. Javier Gonzlez Snchez


javiergs@acm.org

Introduccin a C/C++

Historia

1967 B y BCPL de Martin Ritchards 1970 C de Dennis Ritchie (se utiliza para crear Unix) 1978 C de Kernighan & Ritchie 1982 C++ de Bjarne Stroustrup 1989 ANSI C (ANSI/ISO 9899:1990)

1991 Java
javiergs@acm.org

Caractersticas

Estructurado y Orientado a Objetos Portable Modular Pequeo Veloz Programacin de Sistemas

javiergs@acm.org

Conceptos generales
Estructurado
Qu? Cmo?

Orientado a Objetos
Qu? Cmo? Quin? Compilador Lxico Sintctico Semntico

Distribuido
Qu? Cmo? Quin? Dnde?

Paradigma

Lenguaje

Nivel

Sentido Comn / Ambigedad

Programa

Ciclo de Vida 1. 2. 3. 4. Anlisis Diseo Implementacin Pruebas

Informacin Tipos de Datos Variable Constante Argumento Variable Local De clase De Instancia

Acciones Expresiones Instrucciones Llamada a Mtodo De clase De Instancia Operadores

javiergs@acm.org

Compilar vs Interpretar

Editor
Preprocesador

Disco Disco

El Programa es creado en el editor y se guarda en el Disco. El Programa Preprocesador procesa el cdigo. El Compilador crea el cdigo objeto y lo guarda en el disco. El Lnker liga el cdigo objeto con las libreras. Crea una salida y la gurda en el disco.

Disco Disco

Compilador Linker Linker *.Exe *.Exe


Disco Disco

Disco Disco

Disco Disco

Memoria Primaria

Cdigo Global Stack Heap


Memoria Primaria El CPU toma cada instruccin y la ejecuta. Posiblemente guardando nuevos datos mientras el programa se ejecuta. El Loader pone el programa en memoria.

Cpu Cpu

javiergs@acm.org

Estructura de un programa
1. // Programa de adicin 2. 3. #include <iostream.h> 4. 5. int main() 6. { 7. int numero1, numero2, total; 8. 9. cout<< escribe un numero << endl; 10. cin >> numero1; 11. 12. 13. 14. 15. 16. 17. cout << escribe otro numero << endl; cin >> numero2; total = numero1 + numero2; cout << la suma es << total << endl; return 0; }

javiergs@acm.org

Bases de C/C++

Para considerar

Variables: 32 caracteres (para algunos compiladores) ilimitado

Palabras reservadas: asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t
javiergs@acm.org

Estructura de un programa

bibliotecas incluidas declaracin de constantes y variables globales funciones

main() { estatutos; }
javiergs@acm.org

Bibliotecas

Formato:

#include

<NombreBiblioteca>

Si se trata de bibliotecas del sistema

#include

NombreBiblioteca

Si se trata de bibliotecas propias que estn en el mismo subdirectorio que la aplicacin.

javiergs@acm.org

Tipos de dato

javiergs@acm.org

Tipo bool

El tipo bool ( boolean en Java ) :

Es relativamente nuevo.

Originalmente, las operaciones lgicas manejaban valores numricos diferentes de cero como equivalentes de true y el cero para false.

En algunas versiones de compiladores para C++ el tipo bool no est implementado, por ejemplo en Borland Turbo C++ 4.5 no lo est.

javiergs@acm.org

Tipo String

En C++ el tipo de datos string no existe; se utiliza un arreglo de caracteres; que tiene como delimitador el carcter nulo (\0). Su declaracin es como un arreglo de caracteres:

char cadena[20];

Su uso es a travs de funciones: l Asignar valor strcpy l Concatenar strcat l Obtener la longitud strlen Existen sin embargo bibliotecas para C++ que hacen la implementacin de la una clase String tipo Java en C++
javiergs@acm.org

Constantes Para declarar una constante el formado es:


const tipo nombre1 = valor1, nombreN = valorN;

Por ejemplo:
const int NUM_MAXIMO = 45; const double PI = 3.141592;

Tambin se pueden definir constantes ( con el preprocesador):


#define PI 3.14159265 #define NEWLINE '\n' #define WIDTH 100
javiergs@acm.org

Estatutos de salida de datos Para mostrar informacin en la pantalla se utiliza:

cout << lista;

Donde lista pueden ser variables, valores constantes o expresiones, separados por << Se puede usar endl para pasar el cursor al inicio de la siguiente lnea. Requiere incluir la biblioteca iostream.h

javiergs@acm.org

Caracteres especiales
\a \? \n \\ \ \ \t \0 Sonido de campana Signo de interrogacin Cambio de lnea (igual a endl) Lnea diagonal Comilla simple Comilla doble Tabulador Carcter nulo
javiergs@acm.org

Ejemplo de cout

#include < iostream.h > int a; void main ( ) { a = 10; cout << El valor de a es << a << endl; }

javiergs@acm.org

Estatutos de entrada de datos Para tomar datos del teclado, se utiliza:

cin >> lista_de_variables;

donde lista_de_variables puede ser una o varias variables separadas por >>.

Requiere incluir la biblioteca iostream.h

javiergs@acm.org

Ejemplo de cin

int x, y; char Nombre[20]; cin>>x>>y; cin>>Nombre;

cin ignora los espacios que vengan al inicio y termina de leer el dato al encontrar un espacio, un Tab o un Return.

javiergs@acm.org

Funciones predefinidas Algunas de las funciones matemticas predefinidas de C++ son:

abs(x) sqrt(x) pow(x, y)

valor absoluto de x (tipo entero) raz cuadrada de x (x debe ser positivo) calcula x elevado a la potencia y

Requiere incluir la biblioteca math.h


javiergs@acm.org

Funciones propias

En C++ se pueden tener funciones libres (que no son parte de ninguna clase) o funciones miembro de alguna clase (mtodos).

En Java todos los mtodos son parte de una clase.

javiergs@acm.org

Estructuras de control

if / else switch ? :

for while do/while

continue break
javiergs@acm.org

Operadores

javiergs@acm.org

Programacin con C / C++


ITESM, campus Guadalajara Octubre 2004 Mcs. Javier Gonzlez Snchez
javiergs@acm.org

Prctica 1

Funcin: hipotenusa Funcin: factorial recursivo Funcin: Imprime Tabla de multiplicar Funcin: Dibuja asteriscos

javiergs@acm.org

Funciones y Parmetros

Parmetros por valor y por referencia

En Java los parmetros que son de tipo primitivo se pasan por valor y los objetos se pasan por referencia.

En C++, por default, los parmetros se pasan por valor, para pasarlos por referencia se especifica poniendo un & en la declaracin del parmetro en el encabezado de la funcin.

javiergs@acm.org

Parmetros por valor y por referencia

Parmetros por Valor Son parmetros de entrada para la funcin.

Parmetros por Referencia Son parmetros que se pueden considerar de entrada y salida o solamente de salida. Los parmetros por referencia se especifican con el carcter &.

javiergs@acm.org

Ejemplos de parmetros

void Funcin (int a, int &b) { a = 5; b = 8; } void main( ) { int x = 2, y = 4; Funcion(x, y); cout<<x<< <<y<<endl; }

a 2

&b 0xF5

x 2
0xF1

y 4 8
0xF5

pantalla

2 8
javiergs@acm.org

Argumentos por default


#include <iostream.h> int divide (int a, int b=2) { int r; r=a/b; return (r); } int main () { cout << divide (12); cout << endl; cout << divide (20,4); return 0; }

javiergs@acm.org

Sobrecarga de funciones
#include <iostream.h> int divide (int a, int b) { return (a/b); } float divide (float a, float b) { return (a/b); } int main () { int x=5,y=2; float n=5.0,m=2.0; cout << divide (x, y) << "\n"; cout << divide (n, m) << "\n"; return 0; }
javiergs@acm.org

Funciones inline

inline type name ( arguments ... ) { instructions ; }

javiergs@acm.org

Prototipos
#include <iostream.h> void odd (int a); void even (int a); int main () { int i; do { cout << "Type a number: (0 to exit)"; cin >> i; odd (i); } while (i!=0); return 0; } void odd (int a) { if ((a%2)!=0) cout << "Number is odd.\n"; } void even (int a) { if ((a%2)==0) cout << "Number is even.\n"; } else even (a);

else odd (a);


javiergs@acm.org

Prctica 2
int main () { //inicio, fin, mltiplo-de cout << serie (1,10,3); // serie cout << serie (1,100); // serie cout << serie (A,Z); // serie inversa cout << serie (1,100, -1); }

// completa aqu abajo lo faltante


javiergs@acm.org

Arreglos en C++
para programadores de Java

Los arreglos

En C++ los arreglos no son objetos, son un tipo de dato estructurado.

No hay manera de obtener la longitud de un arreglo, el programador debe conocerla.

C++ no hace verificacin de los lmites del arreglo, por lo que un programa que utilice celdas del arreglo que no existen invade memoria que no le corresponde.

javiergs@acm.org

Declarando arreglos como variable

En Java:

En C++:

int arreglo[]; arreglo = new int[10];

int arreglo[10];

Puede ser una variable, es un objeto y su valor se establece en tiempo de ejecucin.

Debe ser un valor constante, su valor se establece en tiempo de compilacin.

javiergs@acm.org

Uso de arreglos como parmetro

Para declarar un arreglo como parmetro formal de una funcin se utiliza:

tipo parmetro[ ];

El tamao del arreglo no es necesario, sin embargo, al programar la funcin es necesario saberlo.

javiergs@acm.org

Uso de arreglos como parmetro

Un arreglo por default se considera un parmetro por referencia (de entrada y/o salida).

Si se desea que el arreglo acte como un parmetro por valor (de entrada), se debe anteponer const a la declaracin.

Un arreglo NO puede ser regresado como valor de retorno de una funcin.

javiergs@acm.org

Ejemplo de arreglos como variable

#include <iostream.h> int billy [] = { 16, 2, 77, 40, 12071 }; int n, result=0; int main () { for ( n=0 ; n<5 ; n++ ) { result += billy[n]; } cout << result; return 0; }

#include <iostream.h> #define WIDTH 5 #define HEIGHT 3 int jimmy [HEIGHT][WIDTH]; int n,m; int main () { for (n=0; n<HEIGHT; n++) for (m=0; m<WIDTH; m++) { jimmy[n][m]=(n+1)*(m+1); } return 0; }

javiergs@acm.org

Ejemplo de arreglos como parmetro


#include <iostream.h> void printarray (int arg[], int length) { for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n"; } } int main () { int firstarray[] = {5, 10, 15}; int secondarray[] = {2, 4, 6, 8, 10}; printarray (firstarray,3); printarray (secondarray,5); return 0; }
javiergs@acm.org

Programacin con C / C++


ITESM, campus Guadalajara Octubre 2004 Mcs. Javier Gonzlez Snchez
javiergs@acm.org

Prctica 3
int main () { int world[10][10]; int respaldo[10][10]; llena (world, 10); //random llena (respaldo, 10, 0); cruza (world, 10, 1); marco (world, 10, 5); copia (world, respaldo, 10); imprime (respaldo, 10); } // completa abajo lo faltante

javiergs@acm.org

Apuntadores

Operadores & y *

Obtener la direccin de una variable &

Ingresar al espacio dado por una direccin *

Arreglos como apuntadores

Apuntadores a apuntadores

javiergs@acm.org

Ejemplo de apuntadores
#include <iostream.h> int main () { int value1 = 5, value2 = 15; int *p1, *p2; p1 = &value1; // p1 = direccin p2 = &value2; // p2 = direccin *p1 = 10; // valor apuntado *p2 = *p1; // valor apuntado por p2 = valor p1 = p2; // p1 = p2 (direccin copiada) *p1 = 20; // valor apuntado por p1 = 20 cout << "value1==" << value1; cout << "value2==" << value2; return 0; }
javiergs@acm.org

de value1 de value2 por p1 = 10 apuntado por p1

Apuntadores y arreglos
#include <iostream.h> int main () { int numbers[5]; int* p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", "; return 0; }
javiergs@acm.org

Aritmtica de apuntadores

javiergs@acm.org

Apuntadores a apuntadores

javiergs@acm.org

Operadores new / delete

El operador new es parte del lenguaje C++ al igual que delete. No se necesitan incluir archivos bibliotecas para utilizarlos. int *ip; ip = new int [10]; int *ip = new int [10]; Sintaxis: <puntero> = new <tipo> [ long_arreglo ] ( valor_inicial ) Ejemplo: int n; char *s; ... cin >> n; s = new char[n]; nota:
Si no hay memoria disponible el operador new devuelve 0 es decir el valor nulo (NULL).
javiergs@acm.org

Prctica 4
int main () { /* 1.solicita al usuario el tamao de dos vectores */ /* 2.crea los vectores */ /* 3.solicita al usuario valores para los vectores */ /* 4.escribe un mtodo que realice el producto punto de los vectores */ }
javiergs@acm.org

Uso de Clases en C++


para programadores de Java

Los archivos
Java Clase auxiliar ClaseAux.java Clase auxiliar ClaseAux.h

C++

Clase principal (main) Clase.java

Programa principal (main)


#include ClaseAux.h

Prog.cpp

En Java una clase se puede usar si est en el mismo directorio.

En C++ para poder usar una clase se requiere poner incluirla.


javiergs@acm.org

Declaracin de una clase en C++

Formato:

class NombreClase { public:


// declaracin de atributos y mtodos pblicos

private:
// declaracin de atributos y mtodos privados

};

Ojo aqu va un ;
javiergs@acm.org

Ejemplo de una clase en C++

class Rectangulo { public: double CalcArea( ); void Inicializa(double la, double an); private: double largo, ancho; };

javiergs@acm.org

Definicin de las funciones miembro de una clase:

Formato:

tipo NombreClase :: NombreMetodo (lista de parmetros) { estatutos; }

javiergs@acm.org

Ejemplo.continuacin
double Rectangulo::CalcArea( ) { return largo * ancho; } void Rectangulo::Inicializa(double la, double an) { largo = la; ancho = an; }

javiergs@acm.org

Uso de los objetos


Una instancia u objeto de la clase se representa como una variable. Para crear una instancia u objeto se usa el siguiente formato:
Nombre_Clase Nombre_Variable;

(estamos declarando una variable que es un objeto, el nombre de la clase es el tipo de dato)

javiergs@acm.org

Uso de los objetos

Un mensaje pide a un objeto que ejecute alguno de sus mtodos. Para enviar un mensaje a un objeto se usa el siguiente formato: Nombre_Objeto . Nombre_Mtodo (parmetros); (estamos llamando a la funcin miembro de la clase a la que pertenece el objeto).

javiergs@acm.org

Ejemplo: continuacin
void main( ) { Rectangulo A; double area; A. Inicializa(10, 5); area = A.CalcArea( ); }
Enva mensajes al objeto A para que ejecute los mtodos Inicializa y CalcArea Crea el objeto A que es un Rectngulo usando el constructor default

javiergs@acm.org

Uso de clases

Es comn colocar la declaracin y definicin de una clase en un archivo y poner a ese archivo el nombre de la clase con extensin .h. Ejemplo: Rect.h

Para usar la clase en un programa cliente se incluye la clase con un #include. Ejemplo: #include Rect.h

Ojo aqu lleva comillas


javiergs@acm.org

Ejemplo sin constructor Rect.h


class Rect { public: double CalcArea( );
void Inicializa(double la, double an);

Ejerc.cpp
#include <iostream.h> #include Rect.h void main( ) { Rect A; double area; A. Inicializa(10, 5); area = A.CalcArea( ); cout<<area; }

private: double largo, ancho; }; double Rect::CalcArea( ) { return largo * ancho; } void Rect::
Inicializa( double la, double an) {

largo = la; ancho = an; }


javiergs@acm.org

Ejemplo usando un constructor con parmetros

Rect.h
class Rect { public: double CalcArea( ); Rect(double la, double an); private: double largo, ancho; }; Rect::Rect( double la, double an){ largo = la; ancho = an; } double Rect::CalcArea() { return largo * ancho; }

Ejerc.cpp
#include <iostream.h> #include "Rect.h" void main( ) { Rect A(10,5); double area; area = A.CalcArea( ); cout<<area; }

javiergs@acm.org

Los Objetos en Java se manejan por referencia

//JAVA class box { public int value; } box a = new box(); box b; a.value =7; b = a; b.value=12;

a 7...12 b

javiergs@acm.org

Los Objetos en C++ se manejan por valor class box { public: int value; }; box a; box b; a.value = 7; b = a; b = 12; a b

a b

7 7...12

javiergs@acm.org

Practica
Realiza la practica indicada por el instructor para practicar la creacin de: Clase Mtodos Atributos

q q q

Objetos

javiergs@acm.org

Programacin con C / C++


ITESM, campus Guadalajara Octubre 2004 Mcs. Javier Gonzlez Snchez
javiergs@acm.org

POO - simple

javiergs@acm.org

POO ms objetos

javiergs@acm.org

POO - constructores

javiergs@acm.org

POO destructores

javiergs@acm.org

POO - sobrecarga

javiergs@acm.org

POO apuntadores a objetos

-> & * [ ]

javiergs@acm.org

POO sobrecarga de operadores

javiergs@acm.org

Sobrecarga de operadores Casi todos los operadores son sobrecargables:

+ - * / = < > += -= *= /= << >> <<= >>= == != <= >= ++ -- % & ^ ! | ~ &= ^= |= && || %= [] () new delete

Y que tal algo como


int operator@ (int a) Int operator# (int a) Int operator$ (int a)

javiergs@acm.org

POO - this

javiergs@acm.org

Programacin con C / C++


ITESM, campus Guadalajara Octubre 2004 Mcs. Javier Gonzlez Snchez
javiergs@acm.org

Practica
Realiza la practica Indicada por el instructor para practicar la creacin de:
q q q q q q q q

Clase Objetos Mtodos Atributos Constructor Destructor Sobrecarga Static


}
javiergs@acm.org

void main () { Fraccion a (2,5); Fraccion b (2,4) Fraccion * c; Fraccion x = a + b; cout << x.mostrar(); c= &a; cout << *c + 5;

POO - static

javiergs@acm.org

POO mtodos friend

javiergs@acm.org

POO clases friend

javiergs@acm.org

POO - herencia

javiergs@acm.org

POO - Herencia mltiple

javiergs@acm.org

POO - polimorfismo

javiergs@acm.org

POO mtodos virtuales como apoyo al polimorfismo

javiergs@acm.org

POO clases abstractas

javiergs@acm.org

POO en accin

javiergs@acm.org

Vous aimerez peut-être aussi