C++ tutorial para los usuarios de C














C + + tutorial para los usuarios de C

Este texto muestra y pone de relieve caracter�sticas y b�sico principios de C + +. Lo est� dirigido a usuarios con experiencia en C que quieren aprender C + +. Usted ser capaz de expresar su co mediante las m�s ricas C + + la sintaxis y la usted ser� capaz de leer un poco de C + + cdigo.

Aunque el concepto se introduce y se volvieron, esta no es una tutorial sobre programacin orientada a objetos. Usted todav�a tiene que aprender el esp�ritu de la programaci�n orientada a objetos y los detalles de su implementacin C + +, con el fin de ser un verdadero C + + programador.

1.

Hay una nueva forma de # include

bibliotecas (la
viejo m�todo todav�a funciona sin embargo, el compilador se queja).
El . H de extensi�n no se utiliza m�s, y los nombres de
est�ndar
Bibliotecas de C se escriben comenzando con una c . Para que el
programa para utilizar estas bibliotecas utilizando correctamente
espacio de nombres std;

Hay que a�adir:


Si su canci�n using namespace std; # include Si su canci�n using namespace std; # include style = "color: rgb (153, 153, 153 );">// Esta es una clave de C + + de
# include < style = "color: rgb (255, 0, 0);"> c math> style = "color: rgb (153, 153, 153 );">// El math.h biblioteca est�ndar de C
int main () {

un doble;

a = 1,2;
a = sin (a);
cout < volver
0;}

cellspacing = "0">


0.932039






A unos cuantos consejos para principiantes:

Para compilar este programa, escriba (o copiar y pegar) en un
editor de texto (gedit, kwrite, kate, kedit, vi, emacs, nano, pico, mcedit,
Bloc de notas ...), guardarlo como un archivo llamado, por ejemplo margen test01.cpp (si usted es un
novato, mejor poner este archivo dentro de su directorio local, es decir, para
ejemplo / home / jones en un
Unix-like
el recuadro).

Para compilar el archivo de c�digo fuente, escriba el siguiente comando (en la mayor�a de
de c�digo abierto de Unix-como las cajas) en una ventana de la consola o terminal:

g + +-o test01.cpp TEST01

Para ejecutar el archivo ejecutable binario TEST01 que se ha producido
por la compilaci�n (suponiendo que no hubiera errores), escriba lo siguiente:

./test01


Cada vez que modifique la test01.cpp

archivo de c�digo fuente, lo que necesita para compilarlo de nuevo si desea que el
modificaciones que se refleja en el margen TEST01
archivo ejecutable (escriba la tecla de flecha del teclado para recordar
comandos).

2.

Usted puede utilizar / /
a tipo un comentario:


using namespace std; style="color: rgb(255, 0, 0);">// style="color: rgb(153, 153, 153);">Using the standard library namespace.
#include <iostream> style="color: rgb(255, 0, 0);">// style="color: rgb(153, 153, 153);">The iostream library is often used.

int main () style="color: rgb(255, 0, 0);">// style="color: rgb(153, 153, 153);">The program's main routine.
{
double a; style="color: rgb(255, 0, 0);">// style="color: rgb(153, 153, 153);">Declaration of variable a.

a = 456.47;
a = a + a * 21.5 / 100; style="color: rgb(255, 0, 0);">// style="color: rgb(153, 153, 153);">A calculation.

cout << a << endl; style="color: rgb(255, 0, 0);">// style="color: rgb(153, 153, 153);">Display the content of a.

return 0; style="color: rgb(255, 0, 0);">// style="color: rgb(153, 153, 153);">Program end.
}


554,611





(La posibilidad de utilizar margen // para escribir
observaciones ha sido a�adido a C en C99
y ANSI C 2000).

3.

Entrada desde el teclado y la salida de la pantalla se puede
realiza a trav�s de cout << y cin>> :


using namespace std;
#include <iostream>

int main()
{
int a; style="color: rgb(153, 153, 153);">// a is an integer variable
char s [100]; style="color: rgb(153, 153, 153);">// s points to a string of max 99 characters

style="color: rgb(255, 0, 0);">cout << "This is a sample program." << endl;

cout << endl; style="color: rgb(153, 153, 153);">// Just a line feed ( style="color: rgb(255, 102, 102);">end style="color: rgb(153, 153, 153);">of style="color: rgb(255, 102, 102);">l style="color: rgb(153, 153, 153);">ine)

cout << "Type your age : ";
style="color: rgb(255, 0, 0);">cin >> a;

cout << "Type your name: ";
cin >> s;

cout << endl;

style="color: rgb(255, 0, 0);">cout << style="color: rgb(0, 0, 0);">"Hello " << style="color: rgb(0, 0, 0);">s << style="color: rgb(0, 0, 0);">" you're " << style="color: rgb(0, 0, 0);">a << style="color: rgb(0, 0, 0);">" old." << endl;
cout << endl << endl << "Bye!" << endl;

return 0;
}


Este es un programa de ejemplo.

Escriba su edad: 12
Escriba su nombre: Edmond

Hola Edmond est�s 12 a�os de edad.

Bye!








4.

Las variables pueden ser declaradas en cualquier lugar dentro del c�digo:

Si su canci�n using namespace std;
# include
int main () {

un doble;
cout << "Hola, este es un programa de prueba." < cout <<"Escriba un par�metro:";
cin>> a,

a = ( a + 1) / 2;
style = "color: rgb (255, 0, 0);"> doble c,
c = a * 5 + 1;
cout <<"c contiene: "< style = "color: rgb (255, 0, 0);"> int i, j,
i = 0;
j = i + 1;
cout <<"j contiene:" < volver
0;}


Escriba un n�mero: 9

N�mero local: 14
Ha escrito: 9





5.

Una variable puede ser inicializado por un c�lculo
participaci�n de otras variables:


Si su canci�n usando namespace std;
# include
int main () {

doble a = 12 * 3.25;
doble b = style = "color: rgb (255, 0, 0);"> a + 1.112 ;
cout <<"una contiene:" < <<"b contiene:" < a = a * 2 + b;
doble c = style = "color: rgb (255, 0, 0);"> a + b * a ;
cout <<"c contiene:" < 0;}



uno contiene: 39

b contiene: 40.112
c contiene: 4,855.82






6.

C + + permite declarar una variable de car�cter local en un bucle:



using namespace std;
#include <iostream>

int main ()
{
int i; style="color: rgb(153, 153, 153);">// Simple declaration of i
i = 487;

for ( style="color: rgb(255, 0, 0);">int i = 0; i < 4; i++) style="color: rgb(153, 153, 153);">// Local declaration of i
{
cout << i << endl; style="color: rgb(153, 153, 153);">// This outputs 0, 1, 2 and 3
}

cout << i << endl; style="color: rgb(153, 153, 153);">// This outputs 487

return 0;
}


0

1
2
3
487







En el caso de la variable no se ha declarado en alg�n lugar por encima de
el bucle, puede tener la tentaci�n de utilizar a continuaci�n el bucle. Algunos de los primeros
C + + compiladores aceptar esto. Entonces, la variable tiene el valor que ten�a cuando
la
ciclo terminado. Usted no debe hacer esto. Se considera mala pr�ctica:


using namespace std;
#include <iostream>

int main ()
{

for (int i = 0; i < 4; i++)
{
cout << i << endl;
}

style="color: rgb(255, 0, 0);">cout << i << endl; style="color: rgb(153, 153, 153);">// Bad practice!
style="color: rgb(255, 0, 0);">i += 5; style="color: rgb(153, 153, 153);">// Bad practice!
style="color: rgb(255, 0, 0);">cout << i << endl; style="color: rgb(153, 153, 153);">// Bad practice!

return 0;
}


t.cpp: En la funci�n 'int
principales ()':

t.cpp: 12: error: la b�squeda de nombres de 'i' cambi� de nuevo la ISO "por" alcance
t.cpp: 7: error: consiste en el enlace obsoleto 'i'







7.

Una variable global se puede acceder incluso si otro
variable con el mismo nombre que ha sido declarada dentro de la funci�n:


Si su canci�n usando namespace std;
# include
doble de 128 =;
int main () {

doble de 256 =,

cout <<"Local a:" < <<"Global a:" << style = "color: rgb (255, 0, 0 );">:: a < volver
0;}



Local a: 256

Mundial a: 128








8.

Es posible hacer que una variable sea otro:


using namespace std;
#include <iostream>

int main ()
{
double a = 3.1415927;

style="color: rgb(255, 0, 0);">double &b = a; style="color: rgb(153, 153, 153);">// b style="color: rgb(255, 102, 102);">is style="color: rgb(153, 153, 153);">a

b = 89;

cout << "a contains: " << a << endl; style="color: rgb(153, 153, 153);">// Displays 89.

return 0;
}


uno contiene: 89










(Si se utilizan a los punteros y absolutamente quiere saber lo que
ocurre, simplemente piensa en doble & b = a se traduce
a doble * b = & a y
La totalidad de las b

se sustituyen por * b .)

El valor de referencia b no se puede cambiar despu�s de su
declaraci�n. Por ejemplo, usted no puede escribir, unas l�neas m�s adelante, & b = c
esperando que b es ahora c . No va a funcionar.
Todo lo que se dice en la l�nea de declaraci�n de b . Referencia b

y variable un se cas� en esa l�nea y nada
separarlos.

Las referencias se pueden utilizar para permitir a una funci�n modificar una llamada
variable:


Si su canci�n usando namespace std;
# include
cambio
vac�o (doble style = "color: rgb (255, 0, 0 );">& r, doble s)
{
r = 100;
s = 200;}

int main () {

doble k, m,
k = 3;
m = 4;
cambio
(k, m) ;
cout < style = "color:. rgb (153, 153, 153 Muestra );">// 100, 4
return 0;}


100, 4










Si est� acostumbrado a los punteros en C y se preguntan c�mo exactamente el programa
por encima de las obras, as� es como el compilador de C + + que se traducen en C:


Si su canci�n usando namespace std;
# include
cambio vac�o
(double * r, doble s)
{
* r = 100;
s = 200 ;}

int main () {

doble k, m,
k = 3;
m = 4;
el cambio (y k, m);
cout < style = "color:. rgb (153, 153, 153 Muestra );">// 100, 4
return 0;}


100, 4










Una referencia puede ser utilizado para permitir que una funci�n devuelve una variable:


Si su canci�n usando namespace std;
# include
doble style = "color: rgb (255, 0, 0 );">& mayor (r doble y doble & s) {

if (r> s) return r ;
else return s;}

int main () {

doble k = 3;
doble m = 7;
corte
< , <"k:" < style = "color: rgb (153, 153, 153 Muestra );">// 3
cout <<" m: "< style = "color: rgb (153, 153, 153 Muestra );">// 7
cout < style = "color: rgb (255, 0, 0);"> m�s grande (k, m) = 10;
cout <<"k:" < style = "color: rgb (153, 153, 153 Muestra );">// 3
cout <<" m: "< style = "color: rgb (153, 153, 153 Muestra );">// 10
cout < style = "color: rgb (255, 0, 0);"> m�s grande (k, m) ++;
cout <<"k:" < style = "color: rgb (153, 153, 153 Muestra );">// 3
cout <<" m: "< style = "color: rgb (153, 153, 153 Muestra );">// 11
cout < volver
0;}


k: 3

m: 7

k: 3
m: 10

k: 3
m: 11









Una vez m�s, a condici�n de que usted est� acostumbrado a la aritm�tica de punteros y si
se preguntan c�mo el programa anterior funciona, basta con imaginar que el compilador
traducido
que en el siguiente programa est�ndar de C:



Si su canci�n using namespace std;
# include
doble * m�s grande (el doble * r, doble * s) {

si (* r> * s) return r;
else return s;}

int main () {

doble k = 3;
doble m = 7;

cout <<"k:" < <<"m:" < corte < (* grande ((& k, y m))) = 10;
cout <<"k:" < cout <<"m:" < cout < (* grande (( y k, y m))) + +;
cout <<"k:" < cout <<"m: "< cout < volver
0;}


k: 3

m: 7

k: 3
m: 10

k: 3
m: 11









Para terminar, a las personas que tienen que lidiar con los punteros a�n no
como si las referencias son �tiles para las variables con eficacia sin puntero.
Cuidado con esto es
considera una mala pr�ctica. Usted puede meterse en problemas. V�ase, por ejemplo

Si su canci�n usando namespace std;
# include
doble silly_function * () style = "color: rgb (153, 153, 153 );">// Esta funci�n devuelve un puntero a una doble

{static double r = 342; volver
& r ;}

int main () {

doble * a;
un silly_function = ();
style = "color: rgb (255, 0, 0);"> doble y b = * a, style = "color: rgb (153, 153, 153 );">// Ahora b style = "color: rgb (255, 102, 102);"> es style = "color: rgb (153, 153, 153);"> la doble direcci�n que apunta
b + = 1; style = "color: rgb (153, 153, 153 );">// Gran
b = b * b, style = "color: rgb (153, 153, 153 );">// No hay necesidad de escribir * a todo el mundo
b + = 4;
cout <<" contenido de * a, b, r: "< volver
0;}


contenido de * a, b, r: 117653








9.

Los espacios de nombres se pueden declarar.
Las variables declaradas dentro de un espacio de nombres se pueden utilizar gracias a la ::

operador:


Si su canci�n usando namespace std;
# include # include

espacio de nombres de primera

{int a;
int b;
}
segundo espacio de nombres
{
un doble, doble
b;}

int main () {

primero: : a = 2;
primero:: b = 5;
segundo: a = 6,453;
segundo: b = 4.1e4;
cout << primero: un segundo +:: a < cout < volver
0;
}


8.453

41005







10.

Si una funci�n contiene las l�neas simples de c�digo, no utiliza margen de
bucles o similares, puede ser declarado en l�nea . Este
significa que el c�digo se insertar� en todas partes la funci�n es
utilizados. Eso es algo as� como una macro. La principal ventaja es el programa
voluntad
ser m�s r�pido. Un peque�o inconveniente es que ser� m�s grande, ya que el total
c�digo de la funci�n se introdujo en todas partes
se utiliza:


using namespace std;
#include <iostream>
#include <cmath>

style="color: rgb(255, 0, 0);">inline double hypothenuse (double a, double b) style="color: rgb(255, 0, 0);">{ style="color: rgb(255, 0, 0);"> return sqrt (a * a + b * b); style="color: rgb(255, 0, 0);">}

int main ()
{
double k = 6, m = 9;

style="color: rgb(153, 153, 153);">// Next two lines produce exactly the same code:

cout << style="color: rgb(255, 0, 0);">hypothenuse (k, m) << endl;
cout << sqrt (k * k + m * m) << endl;

return 0;
}


10,8167

10.8167








(Las funciones en l�nea se han a�adido a la C en el C99
y ANSI C 2000).

11.

Usted sabe las estructuras de control cl�sico de C: de , si ,

hacer , mientras que , interruptor ... C + + a�ade un control m�s
estructura
excepci�n nombrada:



using namespace std;
#include <iostream>
#include <cmath>

int main ()
{
int a, b;

cout << "Type a number: ";
cin >> a;
cout << endl;

style="color: rgb(255, 0, 0);">try style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> if (a > 100) throw 100; style="color: rgb(255, 0, 0);"> if (a < 10) throw 10; style="color: rgb(255, 0, 0);"> throw a / 3; style="color: rgb(255, 0, 0);"> } style="color: rgb(255, 0, 0);"> catch (int result) style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> cout << "Result is: " << result << endl; style="color: rgb(255, 0, 0);"> b = result + 1; style="color: rgb(255, 0, 0);"> }

cout << "b contains: " << b << endl;

cout << endl;

style="color: rgb(153, 153, 153);">// another example of exception use:

char zero [] = "zero";
char pair [] = "pair";
char notprime [] = "not prime";
char prime [] = "prime";

style="color: rgb(255, 0, 0);">try style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> if (a == 0) throw zero; style="color: rgb(255, 0, 0);"> if ((a / 2) * 2 == a) throw pair; style="color: rgb(255, 0, 0);"> for (int i = 3; i <= sqrt (a); i++) style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> if ((a / i) * i == a) throw notprime; style="color: rgb(255, 0, 0);"> } style="color: rgb(255, 0, 0);"> throw prime; style="color: rgb(255, 0, 0);"> } style="color: rgb(255, 0, 0);"> catch (char *conclusion) style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> cout << "The number you typed is "<< conclusion << endl; style="color: rgb(255, 0, 0);"> }

cout << endl;

return 0;
}


Escriba un n�mero: 5

El resultado es: 10
b contiene: 11

El n�mero que ha escrito es
primer








12.

Es posible definir los par�metros por defecto para
funciones:


using namespace std;
#include <iostream>

double test (double a, double b style="color: rgb(255, 0, 0);"> = 7)
{
return a - b;
}

int main ()
{
cout << test (14, 5) << endl; style="color: rgb(153, 153, 153);">// Displays 14 - 5
cout << test (14) << endl; style="color: rgb(153, 153, 153);">// Displays 14 - 7

return 0;
}


9

7








13.

Una ventaja importante de C + + es la FUNCI�N
SOBRECARGA. Diferentes funciones pueden tener el mismo nombre siempre algo
permite que el compilador distinguir entre ellos: el n�mero de par�metros,
tipo de
par�metros ...


Si su canci�n usando namespace std;
# include
prueba
doble (un doble, doble b) {return

a + b;}

prueba (int a, int b) {return

a - b;}

int main () {

doble m = 7, n = 4;
int k = 5, p = 3;
cout volver
0;}


11, 2








14.

La sobrecarga de operadores se pueden utilizar para redefinir el
b�sicos de los operadores simb�licos para nuevos tipos de par�metros:



using namespace std;
#include <iostream>

struct vector
{
double x;
double y;
};

style="color: rgb(255, 0, 0);">vector operator * (double a, vector b)
{
vector r;

r.x = a * b.x;
r.y = a * b.y;

return r;
}

int main ()
{
vector k, m; style="color: rgb(153, 153, 153);">// No need to type "struct vector"

k.x = 2; style="color: rgb(153, 153, 153);">// To be able to write
k.y = -1; style="color: rgb(153, 153, 153);">// k = vector (2, -1)
style="color: rgb(153, 153, 153);">// see chapter 19.

m = style="color: rgb(255, 0, 0);">3.1415927 * k; style="color: rgb(153, 153, 153);">// Magic!

cout << "(" << m.x << ", " << m.y << ")" << endl;

return 0;
}


(6.28319, -3.14159)










Adem�s de la multiplicaci�n, de 43 a�os otros servicios b�sicos C + + los operadores pueden
sobrecarga, por ejemplo + = , + + , la matriz [] y
etc ...

El << Operador, normalmente se utiliza para el cambio de binario
enteros,
se puede sobrecargar para dar salida a un arroyo en su lugar (por ejemplo, cout <<).
Lo
es
posible
a
sobrecarga
la
<<

operador adicional para la producci�n de nuevos tipos de datos, al igual que los vectores:


using namespace std;
#include <iostream>

struct vector
{
double x;
double y;
};

style="color: rgb(255, 0, 0);">ostream& operator << (ostream& o, vector a) style="color: rgb(255, 0, 0);">{ style="color: rgb(255, 0, 0);"> o << "(" << a.x << ", " << a.y << ")"; style="color: rgb(255, 0, 0);"> return o; style="color: rgb(255, 0, 0);">}

int main ()
{
vector a;

a.x = 35;
a.y = 23;

style="color: rgb(255, 0, 0);">cout << a << endl; style="color: rgb(153, 153, 153);">// Displays (35, 23)

return 0;
}


(35, 23)










15.

�Cansado de la definici�n de la misma funci�n cinco veces? Uno
definici�n de int par�metros de tipo, una definici�n de doble
par�metros de tipo, una definici�n de float par�metros de tipo ...
�No se le olvida un tipo? �Qu� pasa si un nuevo tipo de datos se utiliza? No
problema: el compilador de C + + puede generar autom�ticamente todos los
versi�n de la funci�n que se necesita! S�lo tienes que decir c�mo la
funci�n es similar al declarar una plantilla de marcaDuracell
funci�n:


using namespace std;
#include <iostream>

style="color: rgb(255, 0, 0);">template <class ttype> style="color: rgb(255, 0, 0);">ttype minimum (ttype a, ttype b) style="color: rgb(255, 0, 0);">{ style="color: rgb(255, 0, 0);"> ttype r; style="color: rgb(255, 0, 0);">
style="color: rgb(255, 0, 0);"> r = a; style="color: rgb(255, 0, 0);"> if (b < a) r = b; style="color: rgb(255, 0, 0);">
style="color: rgb(255, 0, 0);"> return r; style="color: rgb(255, 0, 0);">} style="color: rgb(255, 0, 0);">
int main ()
{
style="color: rgb(255, 0, 0);">int i1, i2, i3;
i1 = 34;
i2 = 6;
i3 = style="color: rgb(255, 0, 0);">min style="color: rgb(255, 0, 0);">imum style="color: rgb(255, 0, 0);"> (i1, i2);
cout << "Most little: " << i3 << endl;

style="color: rgb(255, 0, 0);">double d1, d2, d3;
d1 = 7.9;
d2 = 32.1;
d3 = style="color: rgb(255, 0, 0);">minimum (d1, d2);
cout << "Most little: " << d3 << endl;

cout << "Most little: " << style="color: rgb(255, 0, 0);">minimum (d3, 3.5) << endl;

return 0;
}


mayor�a de los peque�os: 6

La mayor�a de los peque�os: 7,9
La mayor�a de los peque�os: 3,5







La funci�n m�nimo se usa tres veces en el anterior
programa,
a�n
el compilador de C + + genera s�lo dos versiones de la misma: m�nimo int
(Int a, int b)

y doble m�nimo (un doble, doble b) .
Que hace el trabajo para todo el programa.

�Qu� pasar�a si se trat� algo as� como el c�lculo m�nimo
(I1, d1)
?
El compilador se han informado de que como un error. Esto se debe a la
plantilla
establece que ambos par�metros son del mismo tipo.

Usted puede usar un n�mero arbitrario de diferentes tipos de datos de la plantilla en un
Modelo de definici�n. Y no todos los tipos de par�metros deben ser plantillas,
algunos de ellos pueden ser de tipo est�ndar o definido por el usuario ( caracteres , int ,

doble ...). Aqu� hay un ejemplo donde el m�nimo

funci�n
toma los par�metros de cualquier tipo (diferentes o el mismo) y genera un
valor
que tiene el tipo del primer par�metro:


Si su canci�n usando namespace std;
# include
template type1, clase type2>
m�nimo de tipo 1 (tipo 1 A, tipo 2 b) {

tipo 1 r, b_converted;
r = a;
b_converted = (tipo 1) b;
if (b_converted r;}

int main () {

int i;
doble d;
i = 45;
d = 7,41;
cout << "La mayor�a de poco:" < <<"La mayor�a de poco:" cout <<"La mayor�a de poco:" volver
0;}


mayor�a de los peque�os: 7

La mayor�a de los peque�os: 7,41
La mayor�a de poco: - booked.net





(El c�digo ASCII de un car�cter "-" es
45 mientras que el c�digo de la 'A' es 65.)


16.

Las palabras clave nueva y eliminar se puede
utilizado para asignar y liberar memoria. Ellos son m�s limpios que
las funciones malloc y gratis de la norma C.

nuevo
[]
y delete [] se utilizan para las matrices.


using namespace std;
#include <iostream>
#include <cstring>

int main ()
{
double *d; style="color: rgb(153, 153, 153);">// d is a variable whose purpose style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // is to contain the address of a style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // zone where a double is located style="color: rgb(153, 153, 153);">

d = new double; style="color: rgb(153, 153, 153);">// new allocates a zone of memory style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // large enough to contain a double style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // and returns its address. style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // That address is stored in d. style="color: rgb(153, 153, 153);">
*d = 45.3; style="color: rgb(153, 153, 153);">// The number 45.3 is stored style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // inside the memory zone style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // whose address is given by d. style="color: rgb(153, 153, 153);">
cout << "Type a number: ";
cin >> *d;

*d = *d + 5;

cout << "Result: " << *d << endl;

delete d; style="color: rgb(153, 153, 153);">// delete deallocates the style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // zone of memory whose address style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // is given by pointer d. style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // Now we can no more use that zone.

d = new double[15]; style="color: rgb(153, 153, 153);">// allocates a zone for an array style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // of 15 doubles. Note each 15 style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // double will be constructed. style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // This is pointless here but it style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // is vital when using a data type style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // that needs its constructor be style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // used for each instance. style="color: rgb(153, 153, 153);">
d[0] = 4456;
d[1] = d[0] + 567;

cout << "Content of d[1]: " << d[1] << endl;

delete [] d; style="color: rgb(153, 153, 153);">// delete [] will deallocate the style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // memory zone. Note each 15 style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // double will be destructed. style=""> // This is pointless here but it style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // is vital when using a data type style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // that needs its destructor be style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // used for each instance (the ~ style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // method). Using delete without style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // the [] would deallocate the style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // memory zone without destructing style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // each of the 15 instances. That style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // would cause memory leakage.

int n = 30;

d = new double[n]; style="color: rgb(153, 153, 153);">// new can be used to allocate an style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // array of random size.
for (int i = 0; i < n; i++)
{
d[i] = i;
}

delete [] d;

char *s;

s = new char[100];

strcpy (s, "Hello!");

cout << s << endl;

delete [] s;

return 0;
}


Tipo un n�mero: 6

Resultados: 11
Contenido de d [1]: 5023
Hello!






17.

En C est�ndar, un estructura

s�lo contiene datos. En C + +, una definici�n de estructura tambi�n puede incluir
funciones. Estas funciones son propiedad de la estructura y est�n destinados a
operar sobre los datos de la estructura. Estas funciones se denominan m�todos.
El ejemplo siguiente define el m�todo de superficie ()
en la estructura vector :


using namespace std;
#include <iostream>

struct vector
{
double x;
double y;

style="color: rgb(255, 0, 0);">double surface () style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> double s; style="color: rgb(255, 0, 0);"> s = x * y; style="color: rgb(255, 0, 0);"> if (s < 0) s = -s; style="color: rgb(255, 0, 0);"> return s; style="color: rgb(255, 0, 0);"> }
};

int main ()
{
vector a;

a.x = 3;
a.y = 4;

cout << "The surface of a: " << style="color: rgb(255, 0, 0);">a.surface() << endl;

return 0;
}


La superficie de: 12









En el ejemplo anterior, un es un ejemplo de estructura
"Vector". (Tenga en cuenta que la palabra clave " estructura "
fue
no
necesario
cuando
declarar
vector

un .)

Al igual que una funci�n, un m�todo puede ser una sobrecarga de cualquier C + +
operador, tener cualquier n�mero de par�metros (sin embargo, un par�metro es siempre
impl�cita: la instancia que act�a en consecuencia), el retorno de cualquier tipo de par�metro o
cambio no hay ning�n par�metro en absoluto.

�Qu� es una clase de marcaDuracell ? Es un estructura
que mantiene su
datos ocultos. S�lo los m�todos de la clase

puede acceder a los datos. Usted
no pueden acceder a los datos directamente, salvo autorizaci�n expresa de la duraci�n de p�blico: Directiva. Aqu� hay un
ejemplo de una clase definici�n.
Se comporta exactamente de la misma manera que el

estructura ejemplo de arriba, porque
la clase de datos x y style = "font-weight: bold;"> y se definen como p�blicos: style = "font-weight: bold ;">

using namespace std;
#include <iostream>

style="color: rgb(255, 0, 0);">class vector
{
style="color: rgb(255, 0, 0);">public:

double x;
double y;

double surface ()
{
double s;
s = x * y;
if (s < 0) s = -s;
return s;
}
};

int main ()
{
vector a;

style="color: rgb(255, 0, 0);">a.x = 3; style="color: rgb(255, 0, 0);"> a.y = 4;

cout << "The surface of a: " << a.surface() << endl;

return 0;
}


La superficie de: 12








En el ejemplo anterior, el main ()
funci�n de los cambios de los datos de ejemplo un

directamente,
con ax = 3 y style = "font-weight: bold;"> a.y = 4 . Esto es posible gracias a
p�blico:
Directiva en la definici�n de clase. Esto se considera una mala pr�ctica. Ver
cap�tulo
30.

Un m�todo se le permite cambiar las variables de la instancia es
actuar sobre:


Si su canci�n using namespace std;
# include
clase vector
{
p�blico:
doble x, double y
;
its_opposite vector
() {

vector r;
rx =-x;
ry =-y;
volver
r,
}
vac�o
be_opposited () {

style = "color: rgb (255, 0, 0);"> x =-x; style = "color: rgb (255, 0, 0 span style );">< =" color: rgb (255, 0, 0); "> y =-y; style = "color: rgb (255, 0, 0);">}
vac�o
be_calculated (un doble, doble b, c doble, doble d) {

style = "color: rgb (255, 0, 0);"> x = a - c, style = "color: rgb (255, 0, 0 span style );">< =" color: rgb (255, 0, 0); "> y = b - d; style = "color: rgb (255, 0, 0);">}
operador vectorial
* (double a) {

vector r;
rx = x * a;
ry = y * a;
retorno r;}

};
int main () {

vector a, b ;
ax = 3;
ay = 5;
a.its_opposite b = ();
cout <<"un vector:" < <<"el vector b:" < style = "color: rgb (255, 0, 0);"> b.be_opposited ();
cout <<"el vector b:" < style = "color: rgb (255, 0, 0);"> a.be_calculated (7, 8, 3, 2);
cout <<"un vector:" << ax <<"," < cout <<"un vector";
a = b * 2 << a = b.its_opposite () * 2;
cout <<"un vector:" << ax <<"," < cout <<"x de lo contrario de un". < volver
0;}


un vector: 3, 5

Vector b: -3, -5
Vector b: 3, 5
Un vector: 4, 6
Un vector: 6, 10
Un vector: -6, -10
x de los opuestos de una: 6





18.

M�todos muy especial y esencial son las
Constructor y el destructor. Se llama autom�ticamente cada vez que un
instancia de una clase se crea ni se destruye (declaraci�n de variables, al final
del programa, nueva , eliminar ...).

El constructor inicializa las variables de la instancia, se
algunos c�lculos, asignar parte de la memoria para la instancia, la producci�n de algunos
texto ... lo que sea necesario.

He aqu� un ejemplo de una definici�n de clase con dos sobrecargado
constructores:


using namespace std;
#include <iostream>

class vector
{
public:

double x;
double y;

style="color: rgb(255, 0, 0);">vector () style="color: rgb(153, 153, 153);">// same name as class
{
x = 0;
y = 0;
}

style="color: rgb(255, 0, 0);">vector (double a, double b)
{
x = a;
y = b;
}

};

int main ()
{
vector k; style="color: rgb(153, 153, 153);">// vector () is called

cout << "vector k: " << k.x << ", " << k.y << endl << endl;

vector m (45, 2); style="color: rgb(153, 153, 153);">// vector (double, double) is called

cout << "vector m: " << m.x << ", " << m.y << endl << endl;

k = vector (23, 2); style="color: rgb(153, 153, 153);">// vector created, copied to k, then erased

cout << "vector k: " << k.x << ", " << k.y << endl << endl;

return 0;
}


vector k: 0, 0

vector m: 45, 2

vector k: 23, 2







Es una buena pr�ctica para tratar de no sobrecargar los constructores. Es
mejor
para declarar un solo constructor y darle los par�metros por defecto
siempre que sea posible:



using namespace std;
#include <iostream>

class vector
{
public:

double x;
double y;

style="color: rgb(255, 0, 0);">vector (double a = 0, double b = 0)
{
x = a;
y = b;
}
};

int main ()
{
vector k;
cout << "vector k: " << k.x << ", " << k.y << endl << endl;

vector m (45, 2);
cout << "vector m: " << m.x << ", " << m.y << endl << endl;

vector p (3);
cout << "vector p: " << p.x << ", " << p.y << endl << endl;

return 0;
}


vector k: 0, 0

vector m: 45, 2

vector p: 3, 0









El destructor es a menudo innecesario. Se puede utilizar para hacer algunas
c�lculos cada vez que una instancia se destruye o salida de un texto para
depuraci�n de ... Pero si las variables del ejemplo, el punto que algunos
memoria asignada entonces el papel del destructor es esencial: debe
sin que la memoria! He aqu� un ejemplo de una aplicaci�n:


using namespace std;
#include <iostream>
#include <cstring>

class person
{
public:

char *name;
int age;

person (char *n = "no name", int a = 0)
{
name = new char [100]; style="color: rgb(153, 153, 153);">// better than malloc!
strcpy (name, n);
age = a;
cout << "Instance initialized, 100 bytes allocated" << endl;
}

style="color: rgb(255, 0, 0);">~person () style="color: rgb(153, 153, 153);">// The destructor
{
delete name; style="color: rgb(153, 153, 153);">// instead of free! style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // delete [] name would be more style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // academic but it is not vital style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // here since the array contains style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // no C++ sub-objects that need style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // to be deleted.

cout << "Instance going to be deleted, 100 bytes freed" << endl;
}
};

int main ()
{
cout << "Hello!" << endl << endl;

person a;
cout << a.name << ", age " << a.age << endl << endl;

person b ("John");
cout << b.name << ", age " << b.age << endl << endl;

b.age = 21;
cout << b.name << ", age " << b.age << endl << endl;

person c ("Miki", 45);
cout << c.name << ", age " << c.age << endl << endl;

cout << "Bye!" << endl << endl;

return 0;
}


Hello!

Instancia inicializada, 100 bytes asignados
sin nombre, edad 0

Instancia inicializada, 100 bytes asignados
John, de 0

John, de 21 a�os

Instancia inicializada, 100 bytes asignados
Miki, de 45 a�os

Bye!

Ejemplo, va a ser eliminado, 100 bytes libres
Ejemplo, va a ser eliminado, 100 bytes libres
Ejemplo, va a ser eliminado, 100 bytes libres









Aqu� tenemos un peque�o ejemplo de una definici�n de la clase de matriz. Un m�todo que
es una sobrecarga de la [] por un operador y las salidas una referencia ( y )
es utilizado en orden a generar un error si un se intenta el acceso datos fuera de los l�mites de una matriz:


using namespace std;
#include <iostream>
#include <cstdlib>

class array
{
public:
int size;
double *data;

array (int s)
{
size = s;
data = new double [s];
}

~array ()
{
delete [] data;
}

style="color: rgb(255, 0, 0);">double &operator [] (int i) style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> if (i < 0 || i >= size) style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> cerr << endl << "Out of bounds" << endl; style="color: rgb(255, 0, 0);"> exit (EXIT_FAILURE); style="color: rgb(255, 0, 0);"> } style="color: rgb(255, 0, 0);"> else return data [i]; style="color: rgb(255, 0, 0);"> }
};

int main ()
{
array t (5);

style="color: rgb(255, 0, 0);">t[0] = 45; style="color: rgb(153, 153, 153);">// OK
style="color: rgb(255, 0, 0);">t[4] = style="color: rgb(255, 0, 0);">t[0] + 6; style="color: rgb(153, 153, 153);">// OK
cout << style="color: rgb(255, 0, 0);">t[4] << endl; style="color: rgb(153, 153, 153);">// OK

style="color: rgb(255, 0, 0);">t[10] = 7; style="color: rgb(153, 153, 153);">// error!

return 0;
}


51

Fuera de los l�mites







19.

Si lanzas un objeto como un vector, todo se
se realice correctamente. Por ejemplo, si el vector k contiene (4, 7) ,
despu�s de
la
elenco
m = k el vector m

contienen (4, 7) tambi�n. Los valores de margen style = "font-weight: bold;"> k.x y style = "font-weight: bold;"> ky simplemente han sido copiados al margen style = "font-weight: bold;"> m.x y style = "font-weight: bold;"> m.y . Ahora bien, supongamos que usted est� jugando con
objetos como el persona de clase
arriba. Los objetos contienen un puntero a una cadena de caracteres. Si
emitir el por objeto
escrito p = r es necesario que algunos
es la funci�n del trabajo a realizar p una copia correcta del

r . De lo contrario, p.name
apuntar� a la misma cadena de caracteres f�sicos como margen style = "font-weight: bold;"> r.name . Es m�s, la primera
cadena de caracteres apuntada por p.name
se pierde y se convierte en un zombi de la memoria. El resultado ser� catastr�fico: un
l�o de los punteros
y la p�rdida de datos. Los m�todos que har�n el trabajo son la copia
Constructor y una sobrecarga del operador =:

using namespace std;
#include <iostream>
#include <cstring>

class person
{
public:

char *name;
int age;

person (char *n = "no name", int a = 0)
{
name = new char[100];
strcpy (name, n);
age = a;
}

style="color: rgb(255, 0, 0);">person (const person &s) style="color: rgb(0, 0, 0);"> style="color: rgb(153, 153, 153);">// The COPY CONSTRUCTOR
{
 name = new char[100];
  strcpy (name, s.name);
 age = s.age;
 }

style="color: rgb(255, 0, 0);">person& operator= (const person &s) style="color: rgb(0, 0, 0);"> // overload of =
{
strcpy (name, s.name);
age = s.age;
return *this;
}

~person ()
{
delete [] name;
}
};

void modify_person (person& h)
{
h.age += 7;
}

person compute_person (person h)
{
h.age += 7;
return h;
}

int main ()
{
person p;
cout << p.name << ", age " << p.age << endl << endl;
style="color: rgb(153, 153, 153);"> // output: no name, age 0

person k ("John", 56);
cout << k.name << ", age " << k.age << endl << endl;
style="color: rgb(153, 153, 153);"> // output: John, age 56

style="color: rgb(255, 0, 0);">p = k;
cout << p.name << ", age " << p.age << endl << endl;
style="color: rgb(153, 153, 153);"> // output: John, age 56

style="color: rgb(255, 0, 0);">p = person ("Bob", 10);
cout << p.name << ", age " << p.age << endl << endl;
style="color: rgb(153, 153, 153);"> // output: Bob, age 10

style="color: rgb(153, 153, 153);"> // Neither the copy constructor nor the overload style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // of = are needed for this operation that modifies style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // p since just the reference towards p is passed to style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // the function modify_person: style="color: rgb(153, 153, 153);"> modify_person (p);
cout << p.name << ", age " << p.age << endl << endl;
style="color: rgb(153, 153, 153);"> // output: Bob, age 17

style="color: rgb(153, 153, 153);"> // The copy constructor is called to pass a complete style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // copy of p to the function compute_person. The style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // function uses that copy to make its computations style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // then a copy of that modified copy is made to style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // return the result. Finally the overload of = is style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // called to paste that second copy inside k:
k = compute_person (p);
cout << p.name << ", age " << p.age << endl << endl;
style="color: rgb(153, 153, 153);"> // output: Bob, age 17
cout << k.name << ", age " << k.age << endl << endl;
style="color: rgb(153, 153, 153);"> // output: Bob, age 24

return 0;
}


sin nombre, edad 0

John, de 56 a�os

John, de 56 a�os

Bob, de 10 a�os

Bob, de 17 a�os

Bob, de 17 a�os

Bob, de 24 a�os








El constructor de copia le permite a su programa para hacer copias de
casos en los que hacer c�lculos. Se trata de un m�todo clave. Durante
c�lculos, los casos se crean para almacenar resultados intermedios. Ellos
se modifican, el reparto y destruidos sin que se tenga conocimiento. Esta es la raz�n
estos m�todos puede ser �til incluso para los objetos simples (ver cap�tulo 14)..

En todos los ejemplos anteriores, los m�todos se definen dentro de la clase
definici�n. Que autom�ticamente hace que los m�todos en l�nea.

20.

Si un m�todo no puede ser en l�nea, o no lo quieren
para estar en l�nea, o si desea que la definici�n de clase para contener la
cantidad m�nima de
informaci�n (o simplemente te gusta la costumbre por separado. archivo de cabecera h
y. cpp archivo de c�digo fuente), entonces s�lo tiene que poner el prototipo de la
m�todo en el interior
la clase y definir el m�todo por debajo de la clase (o en un archivo. cpp
archivo de origen):


Si su canci�n usando namespace std;
# include
clase vector
{
p�blico:
double x;
doble y;
superficie
doble (); style = "color: rgb (153, 153, 153 );">// El, y no {} indican que es un prototipo
};
vector
doble: la superficie ( ) {

doble s = 0;
para (doble i = 0; i

s = s + y;}

volver s;}

int main () {

vector k;
kx = 4;
ky = 5;
cout <<"de la superficie:" < volver
0;}


superficie : 20










Para principiantes:

Si tiene intenci�n de desarrollar una seria C o C + +
programa, es necesario separar el c�digo fuente en margen style = "font-family: sans-serif;".> h archivos de cabecera y style = "font-family: sans-serif;"> cpp archivos de origen.. Este es un
peque�o ejemplo de c�mo se hace. El programa anterior se divide en tres
archivos:

Un archivo de cabecera vector.h :


Si su canci�n clase vector
{
p�blico:
doble x, double y
;
superficie
doble ();}
;

Un archivo de c�digo fuente vector.cpp :


Si su canci�n using namespace std;
style = "color: rgb (255, 0, 0 );"># incluyen" vector.h "

vector
doble: la superficie () {

doble s = 0;
para (doble i = 0; i

s = s + y;}

volver s;}

Y otro archivo fuente main.cpp :


Si su canci�n using namespace std;
# include
style = "color: rgb (255, 0, 0 );"># incluyen" vector.h " style = "color: rgb (255, 0, 0 );">
int main () {

vector k;
kx = 4;
ky = 5;
cout <<"de la superficie:" < 0;
}

Asumiendo vector.cpp es
perfecto, se compila una vez por todas en un lapso de style = "font-family: sans-serif;"> o "archivo objeto".. El comando
de arriba genera el archivo de c�digo objeto, llamado style = "font-family: sans-serif;"> vector.o :

g + +-c vector.cpp

Cada vez que modifique la main.cpp

archivo de origen, se compila en un archivo ejecutable, por ejemplo margen style = "font-family: sans-serif;"> test20 . Usted
indica al compilador expl�citamente que se ha de vincular la duraci�n de style = "font-family: sans-serif;"> vector.o archivo objeto en el
final de test20 ejecutable:


g + + main.cpp-o vector.o
test20


Ejecute el archivo ejecutable de esta manera:

./test20

Esto tiene varias ventajas:

  • El c�digo fuente de vector.cpp
    necesita ser compilado una sola vez. Esto ahorra mucho tiempo en grandes
    los proyectos. (La vinculaci�n de los vector.o
    archivo en el test20

    ejecutable es muy r�pido.)


  • Usted puede dar a alguien la . h
    archivo y la . o archivo (s).
    De esta manera se puede utilizar su software, pero no el cambio debido a que
    no
    tienen la . cpp archivo (s)
    (No confiar demasiado en esto, espere hasta que domines estas preguntas).

Tenga en cuenta que usted puede compilar main.cpp
tambi�n en un fichero objeto y luego vincularlo con margen style = "font-family: sans-serif;"> vector.o :

g + +-c main.cpp

g + + main.o vector.o test20

Esto se aleja de las "diferencias entre C y C + +" tema, pero
si quieres mirar, como un programador real, es necesario
condensan los comandos anteriores en un Makefile

y compilar con el hacer
comandos. El contenido de los archivos por debajo es una versi�n simplificada de este
un Makefile. Copiarlo en un archivo denominado style = "font-family: sans-serif;"> Makefile . Tenga en cuenta, y
esto es muy importante, que el espacio antes de que el margen style = "font-family: monospace;"> g + + comandos es obligatorio y
que es un car�cter de tabulaci�n.
No escriba aqu� la barra espaciadora. En lugar de utilizar la tecla de tabulaci�n (full
izquierda de su teclado, por encima de la tecla de may�sculas).


Si su canci�n test20: main.o vector.o
g + +-o main.o vector.o test20
main.o: main.cpp vector.h
g + +-c main.cpp

vector.o: vector.cpp vector.h
g + +-c vector.cpp

Con el fin de utilizar esa Makefile para compilar, escriba:

hacer test20

El comando que se analizan a trav�s del archivo margen style = "font-family: sans-serif;"> Makefile y averiguar lo que
lo
tiene que hacer. Para empezar, se le dice que abarcan style = "font-family: sans-serif;"> test20 depende de la duraci�n style = "font-family: sans-serif;"> main.o y style = "font-family: sans-serif;"> vector.o . Por lo que
se inicia autom�ticamente " main.o "
y
" hacer vector.o ". Entonces
se comprobar� si test20

ya existe y comprueba las fechas de los de style = "font-family: sans-serif;"> test20 , style = "font-family: sans-serif;"> main.o y style = "font-family: sans-serif;"> vector.o . Si style = "font-family: sans-serif;"> test20 ya existe y style = "font-family: sans-serif;"> main.o y style = "font-family: sans-serif;"> vector.o tiene una marca de fecha
antes de test20 , el

hacer comando determina
que el
versi�n actual de test20
est� al d�a, por lo que no tiene nada que hacer. Se acaba de informar que se
nada. De lo contrario, si test20
no existe, o main.o
o vector.o m�s
reciente que test20 , el
comando que crea una versi�n actualizada del margen style = "font-family: sans-serif;"> test20 se ejecuta: style = "font-family: monospace;".> g + +-o main.o vector.o test20

Esta nueva versi�n de la Makefile
est� m�s cerca de un Makefile est�ndar:


Si su canci�n todo: test20
test20: main.o vector.o
g + +-o main.o vector.o test20
main.o: main.cpp vector.h
g + +-c main.cpp
vector.o: vector.cpp vector.h
g + +-c vector.cpp
limpia:
rm-f *. o test20 * ~ * #

Que se activa la compilaci�n simplemente escribiendo el margen style = "font-family: monospace;"> que Comando. La primera l�nea en
el Makefile implica que si s�lo tiene que teclear style = "font-family: monospace;"> que que pretende " style = "font-family: monospace;"> hacer test20 ":

hacer

Este comando borra todos los archivos generados durante la compilaci�n y todos los
archivos de texto editor de copia de seguridad:

make clean

21.

Cuando un m�todo se aplica a una instancia, que el m�todo
puede utilizar las variables de la instancia, modificar los ... Pero a veces es
necesario conocer la direcci�n de la instancia. No hay problema, la palabra clave this

est� destinado a tal efecto:


Si su canci�n using namespace std;
# include # include

clase vector
{
p�blico:

double x;
doble y;
vector (el doble de a = 0, el doble b = 0) {

x = a;
y = b;}

doble m�dulo () {sqrt
volver
(x * x + y * y);}

set_length vac�o
(doble a = 1)
{
doble longitud, la longitud
= style = "color: rgb (255, 0, 0);"> this-> m�dulo ();
x = x / * La longitud de una;
y = y / longitud * a;
}}
;
int main () {

vector c (3, 5);
cout <<"El m�dulo del vector c: "< (2), style = "color: rgb (153, 153, 153 c );">// transforma en un vector de tama�o 2
cout <<". El m�dulo del vector c: " < (); style = "color: rgb (153, 153, 153 b );">// transforma en un vector unitario
cout <<". El m�dulo del vector c: "< 0;}


El m�dulo del vector c:
5,83095

El m�dulo del vector c: 2
El m�dulo del vector c: 1







22.

Por supuesto, es posible declarar un arreglo de
objetos:


Si su canci�n usando namespace std;
# include # include

clase vector
{public
:
x doble ;
doble y;
vector (el doble de a = 0, el doble b = 0) {

x = a;
y = b;}

doble m�dulo () {sqrt
volver
(x * x + y * y);}

};
int main () {

vector s [1000];
vector t [3] = {vector (4, 5), el vector (5, 5), el vector (2, 4)};
s [23] = t [2];
cout < volver
0;}


6,40312








23.

He aqu� un ejemplo de una declaraci�n de clase completo:


using namespace std;
#include <iostream>
#include <cmath>

class vector
{
public:

double x;
double y;

vector (double = 0, double = 0);

vector operator + (vector);
vector operator - (vector);
vector operator - ();
vector operator * (double a);
double module();
void set_length (double = 1);
};

vector::vector (double a, double b)
{
x = a;
y = b;
}

vector vector::operator + (vector a)
{
return vector (x + a.x, y + a.y);
}

vector vector::operator - (vector a)
{
return vector (x - a.x, y - a.y);
}

vector vector::operator - ()
{
return vector (-x, -y);
}

vector vector::operator * (double a)
{
return vector (x * a, y * a);
}

double vector::module()
{
return sqrt (x * x + y * y);
}

void vector::set_length (double a)
{
double length = this->module();

x = x / length * a;
y = y / length * a;
}

ostream& operator << (ostream& o, vector a)
{
o << "(" << a.x << ", " << a.y << ")";
return o;
}

int main ()
{
vector a;
vector b;
vector c (3, 5);

a = c * 3;
a = b + c;
c = b - c + a + (b - a) * 7;
c = -c;

cout << "The module of vector c: " << c.module() << endl;

cout << "The content of vector a: " << a << endl;
cout << "The opposite of vector a: " << -a << endl;

c.set_length(2); style="color: rgb(153, 153, 153);">// Transforms c in a vector of size 2.

a = vector (56, -3);
b = vector (7, c.y);

b.set_length(); style="color: rgb(153, 153, 153);">// Transforms b in an unitary vector.

cout << "The content of vector b: " << b << endl;

double k;
k = vector(1, 1).module(); style="color: rgb(153, 153, 153);">// k will contain 1.4142.
cout << "k contains: " << k << endl;

return 0;
}


El m�dulo del vector c:
40.8167

El contenido de un vector: (3, 5)

El opuesto de un vector: (-3, -5)
El contenido del vector b: (0.971275, 0.23796)
k contiene: 1,41421








Tambi�n es posible definir una funci�n que produce la suma de dos
vectores sin mencionar
que dentro de la definici�n de la clase vector. Entonces no ser� un m�todo de
el vector de la clase, sino s�lo una funci�n que utiliza vectores:

vector operator + (vector a, vector b)
{
return vector (a.x + b.x, a.y + b.y);
}

En el ejemplo de una definici�n de clase completa, por encima de la
multiplicaci�n
de un vector por un doble est� definido. Supongamos que queremos la multiplicaci�n
de un doble por un vector que se define tambi�n. Entonces tenemos que escribir un
aislado
funci�n fuera de la clase:


Si su canci�n operador vectorial * (un doble, vector b) {vector
volver
(a bx *, a * by);}

Por supuesto, las palabras clave nueva y eliminar para el trabajo
instancias de la clase tambi�n. Es m�s, nueva llama autom�ticamente al
constructor para inicializar los objetos, y eliminar

llama autom�ticamente al destructor antes de desasignar la
memoria de las variables de la instancia tomar:



Si su canci�n using namespace std;
# include # include

clase vector
{
p�blico:

double x;
doble y;
vector (doble = 0, doble = 0); operador
vector
+ (vector); operador
vector - (vector);
operador vectorial - (); operador vectorial
* (doble); m�dulo
doble (); set_length vac�o
(doble = 1);}
;
vector :: vector (un doble, doble b) {

x = a;
y = b;}

vector vector:: operator + (vector)
{vector retorno
(x + x, y + ay);}

vector vector
:: operator - (vector) {vector
volver
(x - ax , y - ay);}

vector vector
:: operator - () {vector
volver
(-x,-y);
}

vector vector:: operator * (double a) {vector
volver
(a * x, a * y);}

doble vector:: m�dulo ()
{
sqrt return (x * x + y * y);}

vector vac�o:: set_length (un doble)
{
vector y the_vector = * esto;
longitud
doble the_vector.module = ();
x = x / * La longitud de una;
y = y / * La longitud de una;}

ostream & operator <<(ostream & o, un vector) {

o <<"(" < o retorno;}

int main () {

vector c (3, 5);
vector
* r, style = "color: rgb (153, 153, 153 );">// r es un puntero a un vector
r = nuevo vector, style = "color: rgb (153, 153, 153 );">// asigna nuevo la memoria necesaria
cout <<* r < style = "color: rgb (153, 153, 153 );">// para mantener una variable vectores", style = "color: rgb (153, 153, 153 per�odo de );"> style = "color: rgb (153, 153, 153);"> / / llama al constructor que style = "color: rgb (153, 153, 153 per�odo de );"> style = "color: rgb (153, 153, 153);"> / / se inicializa a 0, 0. Entonces, finalmente, style = "color: rgb (153, 153, 153 per�odo de );"> style = "color: rgb (153, 153, 153);". devoluciones> / / nuevo la direcci�n del vector
r-> x = 94;
r-> , y = 345;
cout <<* r < * r = vector (94, 343);
cout <<* r << ; endl;
* r * r = - c;
r-> set_length (3);
cout <<* r <
* r = (-c * 3 + -* r * 4) * 5;
cout <<* r < borrar r, style = "color: rgb (153, 153, 153 );">// llama al destructor vector continuaci�n, style = "color: rgb (153, 153, 153 per�odo de );"> style = "color: rgb (153, 153, 153);"> / / libera la memoria
r = &c; style = "color: rgb (153, 153, 153 );">// r apunta hacia vector c
cout <<* r < = nuevo vector (78, 345); style = "color:. rgb (153, 153, 153 );">// Crea un nuevo vector
cout <<* r < style = "color: rgb (153, 153, 153 );">// El constructor se inicializa style = "color: rgb (153, 153, 153 per�odo de );"> style = "color: rgb (153, 153, 153);"> / / del vector x e y a los 78 y 345
cout <<"x componente de r:" < ; x < <<"componente x de r:". <<(* r) x <
delete r;
r = new vector [4], style = "color: rgb (153, 153, 153 );">// crea una matriz de cuatro vectores
r [3] = vector (4, 5);
corte < delete [] r, style = "color: rgb (153, 153, 153 );">// elimina la matriz
int n = 5;
r = nuevo vector [n]; style = "color: rgb (153, 153, 153 );">// lindo
r [1] = vector (432, 3);
cout < delete [] r;
volver
0;}


(0, 0)

(94, 345)
(94, 343)
(0.77992, 2.89685)
(-60.5984, -132.937)
(3, 5)
(78, 345)
x componente de r: 78
x componente de r: 78
6,40312

(432, 3)








24.

Una o m�s variables en una clase puede ser declarada est�tica .
En cuyo caso, s�lo una instancia de estas variables existen, compartida por
todos los casos
de la clase. Debe ser inicializado fuera de la clase
declaraci�n:

Si su canci�n usando namespace std;
# include
clase vector
{
p�blico:
double x;
doble y;
int cuenta est�tica;
vector (el doble de a = 0, el doble b = 0) {

x = a;
y = b;
cuenta + +;}

~ vector () {count

-;
}}
;
vector int
:: count = 0;
int main () {

cout <<"El n�mero de vectores:" < un vector;
cout vector b;
cout < vector r *, * u;

r = new vector;
cout < u = nuevo vector;
cout < eliminar r;
cout < borrar u;
cout < volver
0;}


1

2
3
4
3
2






25.

Una variable de clase tambi�n puede ser const ant. Eso es
como est�tica, excepto que se le da un valor dentro de la clase
declaraci�n y el valor que no se puede modificar:


Si su canci�n using namespace std;
# include
clase vector
{
p�blico:
doble x, double y
;
const static double pi = 3.1415927;
vector (el doble de a = 0, el doble b = 0) {

x = a;
y = b;
}
doble cilinder_volume () {return

x * x / 4 * pi * y;}

};
int main ()
{
cout <<"El valor de pi:" < vector k (3, 4);
cout <<"Resultado:" < volver
0;}


El valor de pi: 3.14159

Resultados: 28.2743







26.

Una clase puede ser derivada de otra clase. El nuevo
clase hereda las variables y m�todos de la clase base. Adicional
variables y / o m�todos se pueden a�adir:


using namespace std;
#include <iostream>
#include <cmath>

class vector
{
public:

double x;
double y;

vector (double a = 0, double b = 0)
{
x = a;
y = b;
}

double module()
{
return sqrt (x*x + y*y);
}

double surface()
{
return x * y;
}
};

class trivector: public vector style="color: rgb(153, 153, 153);">// trivector is derived from vector
{
public:
double z; style="color: rgb(153, 153, 153);">// added to x and y from vector

trivector (double m=0, double n=0, double p=0): vector (m, n)
{
z = p; style="color: rgb(153, 153, 153);">// Vector constructor will
} style="color: rgb(153, 153, 153);">// be called before trivector style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // constructor, with parameters style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // m and n.

trivector (vector a) style="color: rgb(153, 153, 153);">// What to do if a vector is
{ style="color: rgb(153, 153, 153);">// cast to a trivector
x = a.x;
y = a.y;
z = 0;
}

double module () style="color: rgb(153, 153, 153);">// define module() for trivector
{
return sqrt (x*x + y*y + z*z);
}

double volume ()
{
return this->surface() * z; style="color: rgb(153, 153, 153);">// or x * y * z
}
};

int main ()
{
vector a (4, 5);
trivector b (1, 2, 3);

cout << "a (4, 5) b (1, 2, 3) *r = b" << endl << endl;

cout << "Surface of a: " << a.surface() << endl;
cout << "Volume of b: " << b.volume() << endl;
cout << "Surface of base of b: " << b.surface() << endl;

cout << "Module of a: " << a.module() << endl;
cout << "Module of b: " << b.module() << endl;
cout << "Module of base of b: " << b.vector::module() << endl;

trivector k;
k = a; style="color: rgb(153, 153, 153);">// thanks to trivector(vector) definition style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // copy of x and y, k.z = 0
vector j;
j = b; style="color: rgb(153, 153, 153);">// copy of x and y. b.z leaved out

vector *r;
r = &b;

cout << "Surface of r: " << r->surface() << endl;
cout << "Module of r: " << r->module() << endl;

return 0;
}


A (4, 5) b
(1, 2, 3) * r = b

Superficie de una: 20
Volumen de b: 6
La superficie de la base de b: 2
M�dulo de: 6,40312
M�dulo de b: 3,74166
M�dulo de base de b: 2,23607
La superficie de la r: 2
M�dulo de r: 2,23607










27.

En el programa anterior, r-> m�dulo ()
calcula el m�dulo del vector, utilizando x y y , porque r

ha sido declarado un puntero vector. El hecho de que r en realidad
puntos
a un trivector no se tiene en cuenta. Si desea que el programa
para comprobar el tipo de objeto puntiagudo y elegir el adecuado
m�todo, debe declarar que el m�todo como virtuales en el interior del
la clase base.

(Si al menos uno de los m�todos de la clase base es virtual y luego una
"Cabecera" de 4 bytes se a�ade a todas las instancias de las clases. Este
permite que el programa para determinar lo que es un vector en realidad apunta.)
(4 bytes es probablemente la aplicaci�n espec�fica. En una m�quina de 64 bits tal vez
es de 8 bytes ...)



Si su canci�n using namespace std;
# include # include

clase vector
{
p�blico:

double x;
doble y;
vector (el doble de a = 0, el doble b = 0) {

x = a;
y = b;}

virtual de doble m�dulo () {sqrt
volver
(x * x + y * y);}

};
clase trivector: vector p�blica
{
p�blico:
z doble;
trivector (doble m = 0, n = 0 doble, doble p = 0) {

x = m; < lapso
style = "color: rgb (153, 153, 153 );">// S�lo por el juego,
y = n; style = "color: rgb (153, 153, 153 );">// aqu� yo no lo llamo el vector
z = p; style = "color: rgb (153, 153, 153 constructor );">// y hacer que el
} style = "color: rgb (153, 153, 153 constructor trivector );">// hacer style = "color: rgb (153, 153, 153 per�odo de );"> style = "color: rgb (153, 153, 153);" trabajo> / / conjunto. Mismo resultado

m�dulo doble () {sqrt
volver
(x * x + y * y + z * z);}
.
};
prueba de vac�o
(vector & k) {

cout <<"Resultado del test:" <

int main () {

un vector (4, 5);
trivector b (1, 2, 3);
cout <<"un (4, 5) b (1, 2, 3) "< vector * r, r =
&a;
cout <<"m�dulo de un vector:" < m�dulo () < r = &B;
cout <<" m�dulo de trivector b: "< m�dulo () < prueba
(a);
prueba
(b);

vector & s = b;
cout <<"m�dulo de trivector b:" < volver
0;
}


A (4, 5) b
(1, 2, 3)

m�dulo de un vector: 6,40312
m�dulo de trivector b: 3,74166
Resultado de la prueba:
6,40312
Resultado de la prueba:
3,74166
m�dulo de trivector b: 3,74166








28.

Tal vez te preguntes si una clase se puede derivar de m�s
de una base de clase. La respuesta es s�:



Si su canci�n using namespace std;
# include # include

clase vector
{
p�blico:

double x;
doble y;
vector (el doble de a = 0, el doble b = 0) {

x = a;
y = b;}

superficie
doble () {
f�bricas
return (x * y);}

};
clase
n�mero {
p�blica :
doble z, n�mero
(un doble)

{z = a;}

is_negative
int () {

if (z <0) return 1;
else return 0;}

};
style = "color: rgb (255, 0, 0);"> class trivector: vector p�blica, el n�mero de p�blico
{
p�blico:
trivector
(doble a = 0, doble b = 0, doble c = 0) style = "color: rgb (255, 0, 0 );">: vector (a, b), n�mero (c)
{}
style = "color: rgb (153, 153, 153 );">// El constructor trivector llama el vector style = "color: rgb (153, 153, 153 per�odo de );"> style = "color: rgb (153, 153, 153);"> / / constructor, el constructor n�mero, style = "color: rgb (153, 153, 153 per�odo de );"> style = "color: rgb (153, 153, 153);".> / / y en este ejemplo no hace m�s style = "color: rgb (153, 153, 153 );">
Volumen doble () {
f�bricas
return (x * y * z);}

};

int main () {

trivector a (2, 3, -4);
cout < cout < cout < volver
0;}


24

6
1







29.

Derivaci�n de clase le permite construir m�s
clases complejo construido a partir de las clases base. Hay otro
aplicaci�n de la derivaci�n de clase: lo que permite que el programador escriba
gen�rico
funciones.

Suponga que define una clase base sin variables. No tiene ning�n sentido
utilizar instancias de esa clase dentro de su programa. Pero luego de escribir
un
funci�n cuyo prop�sito es ordenar las instancias de esa clase. que
funci�n ser� capaz de resolver cualquier tipo de objeto que pertenezcan
a una clase derivada de esa clase base! La �nica condici�n es que
dentro de cada definici�n de clase derivada, todos los m�todos que la clase
funci�n
las necesidades se han definido correctamente:


using namespace std;
#include <iostream>
#include <cmath>

style="color: rgb(255, 0, 0);">class octopus style="color: rgb(255, 0, 0);">{ style="color: rgb(255, 0, 0);">public: style="color: rgb(255, 0, 0);">
style="color: rgb(255, 0, 0);"> virtual double module() = 0; style="color: rgb(153, 153, 153);">// = 0 implies function is not style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // defined. This makes instances style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // of this class cannot be declared. style="color: rgb(255, 0, 0);">};

double biggest_module (octopus &a, octopus &b, octopus &c)
{
double r = a.module();
if (b.module() > r) r = b.module();
if (c.module() > r) r = c.module();
return r;
}

class vector style="color: rgb(255, 0, 0);">: public octopus
{
public:

double x;
double y;

vector (double a = 0, double b = 0)
{
x = a;
y = b;
}

double module()
{
return sqrt (x * x + y * y);
}
};

class number style="color: rgb(255, 0, 0);">: public octopus
{
public:

double n;

number (double a = 0)
{
n = a;
}

double module()
{
if (n >= 0) return n;
else return -n;
}
};

int main ()
{
vector k (1,2), m (6,7), n (100, 0);
number p (5), q (-3), r (-150);

cout << biggest_module (k, m, n) << endl;
cout << biggest_module (p, q, r) << endl;

cout << biggest_module (p, q, n) << endl;

return 0;
}


100

150

100









Tal vez usted piensa que "est� bien, eso es una buena idea para derivar clases de
el pulpo clase debido a que la forma en que se puede aplicar a casos
de
mi clase de m�todos y la funci�n que fueron dise�ados de una forma gen�rica para
el pulpo de clase. Pero lo que si hay otra clase base,
llamado sepia , que tiene m�todos muy interesantes y
funciones tambi�n? �Tengo que hacer mi elecci�n entre pulpo y sepia

cuando quiero derivar una clase? "No, por supuesto que no. Una clase derivada puede
ser
derivados tanto de pulpo y sepia .
Ese es el polimorfismo. La clase derivada s�lo tiene que definir los m�todos de
necesarios para pulpo junto con los m�todos necesarios para sepia :



Si su canci�n clase pulpo
{
virtual de doble m�dulo () = 0;}
;
clase sepia
{int
virtual de la prueba () = 0 ;}
;
clase vector style = "color: rgb (255, 0, 0 );">: pulpo p�blico, el p�blico de sepia

{double x;
doble y;
style = "color: rgb (255, 0, 0);"> m�dulo doble ()
sqrt {
return (x * x + y * y);}

style = "color: rgb (255, 0, 0);"> int test ()

{if (x> y) return 1; volver
m�s 0;
}}





30.

El p�blico : Directiva involucra a las variables o
los siguientes m�todos pueden ser
acceso y uso en todo el programa.

Si desea que las variables y m�todos a ser accesible s�lo a los m�todos de
de la clase y
a los m�todos de las clases derivadas, debe poner la palabra clave protected :

delante de ellos.

Si desea que las variables o m�todos para ser accesible s�lo a los m�todos de
la clase, entonces usted debe poner la palabra clave private : antes.

El hecho de que las variables o m�todos est�n declarados privados o protegidos
significa que nada externo a la clase pueda acceder a ellos. Eso es
Encapsulaci�n. (Si usted quiere dar una funci�n espec�fica del derecho a la
acceso a las variables y m�todos, entonces usted debe incluir el
El prototipo de la funci�n dentro de la definici�n de la clase, precedido por el
palabra clave amigo ).

Una buena pr�ctica es encapsular todas las variables de una clase. Este
Puede sonar extra�o si est�s acostumbrado a las estructuras de C. En efecto, una estructura
s�lo tiene sentido si puede acceder a sus datos ... En C + + que tiene que
crear m�todos de acceso a los datos dentro de una clase. El ejemplo siguiente utiliza
la
ejemplo b�sico del cap�tulo 17, sin embargo, declara que la clase de datos que se
protegidas:



using namespace std;
#include <iostream>

style="color: rgb(0, 0, 0);">class vector
{
style="color: rgb(255, 0, 0);">protected:

double x;
double y;

style="color: rgb(255, 0, 0);">public:

style="color: rgb(255, 0, 0);">void set_x (int n) style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> x = n; style="color: rgb(255, 0, 0);"> } style="color: rgb(255, 0, 0);">

   void set_y (int n)
{
y = n;
}

double surface ()
{
double s;
s = x * y;
if (s < 0) s = -s;
return s;
}
};

int main ()
{
vector a;

style="color: rgb(255, 0, 0);">a.set_x (3); style="color: rgb(255, 0, 0);"> a.set_y (4);

cout << "The surface of a: " << a.surface() << endl;

return 0;
}


La superficie de: 12








El ejemplo anterior es un poco extra�o, ya que la clase de datos x e y se puede ajustar
pero no pueden repetirse. Cualquier intento de la funci�n main () para leer
hacha o style = "font-weight: bold;"> ay se traducir� en una recopilaci�n
error. En el siguiente ejemplo, x e y
pueden leerse:


using namespace std;
#include <iostream>

class vector
{
protected:

double x;
double y;

public:

void set_x (int n)
{
x = n;
}
style="color: rgb(0, 0, 0);"> void set_y (int n)
{
y = n;
}

style="color: rgb(255, 0, 0);">double get_x () style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> return x; style="color: rgb(255, 0, 0);"> } style="color: rgb(255, 0, 0);">

style="color: rgb(0, 0, 0);"> style="color: rgb(0, 0, 0);"> style="color: rgb(255, 0, 0);"> double get_y () style="color: rgb(255, 0, 0);"> { style="color: rgb(255, 0, 0);"> return y; style="color: rgb(255, 0, 0);"> }

double surface ()
{
double s;
s = x * y;
if (s < 0) s = -s;
return s;
}
};

int main ()
{
vector a;

a.set_x (3);
a.set_y (4);

cout << "The surface of a: " << a.surface() << endl;
style="color: rgb(255, 0, 0);">cout << "The width of a: " << a.get_x() << endl; style="color: rgb(255, 0, 0);"> cout << "The height of a: " << a.get_y() << endl;

return 0;
}


La superficie de: 12

El ancho de una: 3
La altura de un 4






En C + + no se supone que para acceder a los datos de una clase directamente.
M�todos tienen que ser declarados. �Por qu� es esto? Existen muchas razones. Uno de ellos es
que este
le permite cambiar la forma en que se representan los datos dentro de la clase.
Otra raz�n es la siguiente permite que los datos dentro de la clase que se
cross-dependiente. Supongamos que x y
y debe ser siempre de la misma
de lo contrario no puede pasar cosas feas ... Si se le permite el acceso
la
datos de la clase directamente, ser�a f�cil imponer decir x positivo y un
negativos y. En el siguiente ejemplo, se trata de un estricto control:


Si su canci�n using namespace std;
# incluyen
style = "color: rgb (255, 0, 0);"> int signo (doble n) style = "color: rgb (255, 0, 0 = span style );"><" color: rgb (255, 0, 0 );">{ style = "color: rgb (255, 0, 0 span style );">< =" color: rgb (255, 0, 0); "> if (n> = 0) return 1; style = "color: rgb (255, 0, 0 span style );">< =" color: rgb (255, 0, 0); "> devuelve -1; style = "color: rgb (255, 0, 0 = span style );"><" color: rgb (255, 0, 0 );">}
clase vector
{
protegidas:
doble x, double y
;
p�blico:
vac�o set_x (int n) {

x = n;
style = "color: rgb (255, 0, 0);"> if (sign (x) = signo (y)!) y =-y;
}
vac�o set_y (int n) {

y = n;
style = "color: rgb (255, 0, 0);"> if (! signo (y) = signo (x)) x =-x;
}
doble get_x () {

return x;}

get_y doble () {

return y;

}

doble superficie () {

doble s,
s = x * y;
if (s <0) = s-s,
volver s;}

};
int main () {

un vector;
a.set_x (-3);
a.set_y (4);
cout <<"La superficie de un:" < cout <<"El ancho de un: "< cout <<" La altura de un: "< return 0;}


La superficie de: 12

El ancho de una: 3
La altura de un 4






31.

Vamos a hablar de entrada / salida. En C + + que es un
tema muy amplio.

Aqu� hay un programa que graba en un archivo:


Si su canci�n usando namespace std;
# include # include

int main () {

fstream f;

f.open ("prueba.txt", ios:: out);
f <<". Esta es una salida de texto a un archivo" < un doble = 345;
f <<"Un n�mero:" < f.close ();
volver
0;}



Esta es una salida de texto a un
archivo.

Un n�mero: 345








Este es un programa que lee de un archivo:


Si su canci�n
using namespace std;
# include # include

int main () {

fstream f ;
char c;
cout <<"�Qu� hay dentro del archivo prueba.txt" < < f . abierto ("prueba.txt", ios:: in);
mientras
{
f.get (c); style = "color: rgb (153, 153, 153 o C = );">// f.get ()
cout <

f.close ();
volver
0;}


Esta es una salida de texto a un
archivo.

Un n�mero: 345








32.

En t�rminos generales, es posible hacer en el car�cter
matrices de las mismas operaciones que en los archivos. Esto es muy �til para convertir
datos o gestionar matrices de memoria.

Aqu� hay un programa que escribe dentro de una matriz de caracteres:

using namespace std;
#include <iostream>
#include <strstream>
#include <cstring>
#include <cmath>

int main ()
{
char a[1024];
ostrstream b(a, 1024);

b.seekp(0); style="color: rgb(153, 153, 153);">// Start from first char.
b << "2 + 2 = " << 2 + 2 << ends; style="color: rgb(153, 153, 153);">// ( ends, not endl ) style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // ends is simply the style="color: rgb(153, 153, 153);"> style="color: rgb(153, 153, 153);"> // null character '\0'
cout << a << endl;

double v = 2;

strcpy (a, "A sinus: ");

b.seekp(strlen (a));
b << "sin (" << v << ") = " << sin(v) << ends;

cout << a << endl;

return 0;
}


2 + 2 = 4

Un seno: sin (2) = 0.909297








Un programa que lee en una cadena de caracteres:


Si su canci�n usando namespace std;
# include # include

# include
int main () {

char a [1024];
istrstream b (a, 1024);
strcpy (a, "45.656");
doble k, p;
b.seekg (0), style = "color:. rgb (153, 153, 153 Inicio );">// del primer car�cter
b>> k;
k = k + 1;

cout < strcpy (a, "444,23 56,89");
b.seekg (0);
b >> k>> p;
cout < 0;}


46.656

444,23, 57,89







33.

Este programa realiza la salida con formato dos diferentes
maneras. Por favor, tenga en cuenta el ancho () y setw () Los modificadores son
s�lo es eficaz en la salida del tema junto al arroyo. Posterior
art�culos que no se ver�n afectados.


Si su canci�n usando namespace std;
# include # include

int main () {

int i;

cout <<"La lista de los n�meros:" < for (i = 1; i <= 1024; i *= 2)
{
cout.width ( 7);
cout <

cout <<"una tabla de n�meros:" < (i = 0; i <= 4; i + +) {

cout <

volver
0;}


una lista de n�meros:

1
2
4
8
16
32

64
128

256
512
1024
Una tabla de n�meros:

0 0
1 1
2 8
3 27

4 64








Ahora tiene un conocimiento b�sico de C + +. Dentro de los buenos libros que
voluntad
aprender muchas cosas m�s. El sistema de gesti�n de archivos es muy poderoso,
tiene muchas otras posibilidades que las que se ilustran aqu�. Hay
Tambi�n es mucho m�s que decir acerca de las clases: clases de plantilla, virtual
clases ...

Con el fin de trabajar de manera eficiente con C + + se necesita una buena referencia
libro,
al igual que lo necesita para C. Tambi�n se necesita informaci�n sobre c�mo C + +
se utiliza en su dominio de actividad. Las normas, los
global
enfoque, los trucos, los problemas t�picos y sus
soluciones ... La mejor referencia es, por supuesto, los libros escritos por
Bjarne
Stroustrup s� mismo (no recuerdo cu�l de ellos he le�do). Los siguientes
libro contiene casi todos los detalles de
C y C + +, que se construye de una manera similar a este texto y
contiene un CD:

C Jamsa es / C + + programador de la Biblia
©right; 1998 Jamsa Prensa
Las Vegas, Estados Unidos

En franc�s:

C / C + + La Biblia du programmeur

Kris Jamsa, Ph.D - Lars Klander
Francia: Editions Eyrolles
www.eyrolles.com
Canad�:. Les Editions Reinaldo Goulet inc
www.goulet.ca

ISBN 2-212-09058-7

Se ha quedado obsoleto y ahora es:

C Jamsa es / C + + / C # Programador Biblia
Onword Prensa

Otra referencia:

precisi�n :

CoderSource.net: www.codersource.net/

C + +
Gu�a:

http://www.lulu.com/content/258714

Una explicaci�n similar para Ada est� disponible en href = "http://www.adahome.com/Ammo/cpp2ada.html"> www.adahome.com/Ammo/cpp2ada.html

Un tutorial de Haskell por un programador de C: href = "http://learnyouahaskell.com/"> learnyouahaskell.com

Me gustar�a dar las gracias a Didier Bizzarri,
Toni Ronkko ,
Fr�d�ric tela ,
Jack Lam, Morten Brix Pedersen ,
Elmer Fittery,
Ana Yuseepi,
William L. Dye,
Bahjat F. Qaqish,
Muthukumar Veluswamy,
Marco Cimarosti, Jarrod Miller, Nikolaos Pothitos, href = "http://blog.donews.com/ralix"> Ralph Wu , Dave Abercrombie,
Alex Pennington, Marsden Scott, Robert Krten, Dave Panter, Cihat
Imamoglu, Zograf Bohdan y David L. Markowitz por su
inspiraci�n, consejos, ayuda, datos, errores
informes, referencias, la mejora de la redacci�n Ingl�s y
traducci�n.


You can leave a response, or trackback from your own site.

Leave a Reply

Powered by WordPress | Bigdaddysoftware.com