Professional Documents
Culture Documents
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
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
Programa
Informacin Tipos de Datos Variable Constante Argumento Variable Local De clase De Instancia
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
Disco Disco
Disco Disco
Memoria Primaria
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
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
main() { estatutos; }
javiergs@acm.org
Bibliotecas
Formato:
#include
<NombreBiblioteca>
#include
NombreBiblioteca
javiergs@acm.org
Tipos de dato
javiergs@acm.org
Tipo bool
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
Por ejemplo:
const int NUM_MAXIMO = 45; const double PI = 3.141592;
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
donde lista_de_variables puede ser una o varias variables separadas por >>.
javiergs@acm.org
Ejemplo de cin
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
valor absoluto de x (tipo entero) raz cuadrada de x (x debe ser positivo) calcula x elevado a la potencia y
Funciones propias
En C++ se pueden tener funciones libres (que no son parte de ninguna clase) o funciones miembro de alguna clase (mtodos).
javiergs@acm.org
Estructuras de control
if / else switch ? :
continue break
javiergs@acm.org
Operadores
javiergs@acm.org
Prctica 1
Funcin: hipotenusa Funcin: factorial recursivo Funcin: Imprime Tabla de multiplicar Funcin: Dibuja asteriscos
javiergs@acm.org
Funciones y Parmetros
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 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
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
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);
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); }
Arreglos en C++
para programadores de Java
Los arreglos
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
En Java:
En C++:
int arreglo[10];
javiergs@acm.org
tipo parmetro[ ];
El tamao del arreglo no es necesario, sin embargo, al programar la funcin es necesario saberlo.
javiergs@acm.org
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.
javiergs@acm.org
#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
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 *
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
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
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
Los archivos
Java Clase auxiliar ClaseAux.java Clase auxiliar ClaseAux.h
C++
Prog.cpp
Formato:
private:
// declaracin de atributos y mtodos privados
};
Ojo aqu va un ;
javiergs@acm.org
class Rectangulo { public: double CalcArea( ); void Inicializa(double la, double an); private: double largo, ancho; };
javiergs@acm.org
Formato:
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
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
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
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) {
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
//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
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
-> & * [ ]
javiergs@acm.org
javiergs@acm.org
+ - * / = < > += -= *= /= << >> <<= >>= == != <= >= ++ -- % & ^ ! | ~ &= ^= |= && || %= [] () new delete
javiergs@acm.org
POO - this
javiergs@acm.org
Practica
Realiza la practica Indicada por el instructor para practicar la creacin de:
q q q q q q q q
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
javiergs@acm.org
javiergs@acm.org
POO - herencia
javiergs@acm.org
javiergs@acm.org
POO - polimorfismo
javiergs@acm.org
javiergs@acm.org
javiergs@acm.org
POO en accin
javiergs@acm.org