Está en la página 1de 24

Algoritmos y Estructuras de Datos

Algoritmos y Estructuras de Datos

Clase: Estructuras y Clases en C++


Dra. Adriana Menchaca Mndez

ENES Unidad Morelia, UNAM

Agosto 2016
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Cuando implementamos un algoritmo muchas veces es


necesario representar un objeto, el cual puede tener varios
atributos asociados.

Ejemplo: Para representar un persona necesitamos conocer:


nombre
edad
peso
estatura, etc.
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Una posible solucin es tener variables independientes:

1 string myName;
2 int myBirthYear;
3 int myBirthMonth;
4 int myBirthDay;
5 int myHeight;
6 int myWeight;

Sin embargo, esto no es prctico cuando:


Queremos pasar la informacin de una persona a una
funcin.
Queremos almacenar informacin sobre varias personas.
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

C++ permite al programador definir sus propios tipos de datos


agregados, los cuales permiten agrupar variables de diferentes
tipos.
La forma ms simple de definir tipos de datos agregados
es utilizando una estructura.

1 struct Student
2 {
3 short id;
4 int age;
5 double score;
6 };
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Por convencin los nombres de las estructuras inician con


una letra maysculas para poder diferenciarlas de las
variables simples.
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Por convencin los nombres de las estructuras inician con


una letra maysculas para poder diferenciarlas de las
variables simples.
Cuando declaramos una estrutura solamente indicamos al
compilador que usaremos un nuevo tipo de dato.
No se reserva memoria!
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Para declarar una variable del tipo de dato Student usamos:

1 Student joe;
2 Student frank;

Para acceder a los elementos de una variable de tipo


estructura, usamos el operador punto (.):

1 joe.id = 10;
2 joe.age = 20;
3 joe.score = 9.5;
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++


Inicializando estructuras
En C++ 11 es posible inicializar los elementos de una
estructura utilizando una lista.

1 struct Employee
2 {
3 short id;
4 int age;
5 double wage;
6 };
7

8 // joe.id = 1, joe.age = 32, joe.wage = 60000.0


9 Employee joe = { 1, 32, 60000.0 };
10 // frank.id = 2, frank.age = 28, frank.wage = 0.0 (
default initialization)
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++


En C++11 es posible colocar valores por default. De esta
forma las variables se inicalizan en cuanto se reserva memoria
para una variable de este tipo.

1 struct Rectangle
2 {
3 double length = 1.0;
4 double width = 1.0;
5 };

Cuando se colocan valores por default no es posible inicializar


la variable de las siguientes formas:

1 Rectangle x{ 2.0, 2.0 }; // uniform initialization


2 Rectangle x = { 2.0, 2.0 };
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++


Estructuras y funciones
Una funcin puede recibir como parmetro una estructura
completa.

1 # include <iostream >


2
3 s t r u c t Employee {
4 short i d ;
5 i n t age ;
6 double wage ;
7 };
8
9 void p r i n t I n f o r m a t i o n ( Employee employee ) {
10 s t d : : c o u t << "ID: " << employee . i d << "\n" ;
11 s t d : : c o u t << "Age: " << employee . age << "\n" ;
12 s t d : : c o u t << "Wage: " << employee . wage << "\n" ;
13 }
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Estructuras y funciones

Una funcin puede devolver una estructura completa.

1 # include <iostream >


2
3 s t r u c t P o i n t3 d {
4 double x ;
5 double y ;
6 double z ;
7 };
8
9 P o i n t3 d g e t Z e r o P o i n t ( ) {
10 P o i n t3 d temp = { 0 . 0 , 0 . 0 , 0 .0 } ;
11 r e t u r n temp ;
12 }
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Una estructura puede tener como elemento otra estructura.

1 s t r u c t Employee {
2 short i d ;
3 i n t age ;
4 double wage ;
5 };
6
7 s t r u c t Company {
8 Employee CEO; / / Employee i s a s t r u c t w i t h i n th e Company
struct
9 i n t numberOfEmployees ;
10 };
11
12 Company myCompany1 ;
13 Company myCompany2 = { { 1 , 42 , 60000.0 f } , 5 } ;
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

La POO es un paradigma de programacin que permite


modelar un problema mediante la identificacin de diferentes
objetos. Un objeto tiene dos componentes:
Lista de propiedades relevantes
Un conjunto de funciones que pueden desempear.
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

La POO implica que los programas sean escritos de una


manera modular. Esto trae las siguientes ventajas:
Una mejor organizacin del cdigo y, por tanto, mejor
entendimiento del mismo.
Un alto grado de cdigo re-utilizable.
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

Un objeto es definido a travs de una clase.

1 c l a s s DateClass {
2 public :
3 i n t m_year ;
4 i n t m_month ;
5 i n t m_day ;
6
7 void p r i n t ( )
8 {
9 s t d : : c o u t << m_year << "/" << m_month << "/" << m_day ;
10 }
11 };
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

Al igual que una estructura, una clase solo sirve para definir un
tipo de dato.

Al declarar una clase no se est reservando memoria!


Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

Cuando declaramos una variable de una clase se dice que se


crea un objeto (instancia de dicha clase).

1 // declare a variable of class DateClass


2 DateClass today { 2020, 10, 14 };
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

Para acceder a los elementos de una clase se utiliza el


operador punto (.).

1 i n t main ( ) {
2 DateClass today { 2020 , 10 , 14 } ;
3
4 / / use member s e l e c t i o n o p e r a t o r t o s e l e c t a member v a r i a b l e
o f th e c l a s s
5 today . m_day = 1 6 ;
6 / / use member s e l e c t i o n o p e r a t o r t o c a l l a member f u n c t i o n
o f th e c l a s s
7 today . p r i n t ( ) ;
8
9 return 0;
10 }
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

Los miembros de una clase (atributos y mtodos) pueden ser:


Pblicos. Se puede acceder a ellos desde cualquier parte
del programa.
Privados. Se puede acceder a ellos solamente desde un
mtodo de la clase.
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++


Programacin orientada a objetos (POO)

1 c l a s s DateClass / / members are p r i v a t e by d e f a u l t


2 {
3 / / p r i v a t e by d e f a u l t , can o n l y be accessed by o t h e r members
4 i n t m_month ;
5 i n t m_day ;
6 i n t m_year ;
7 };
8
9 i n t main ( ) {
10 DateClass date ;
11 date . m_month = 1 0 ; / / e r r o r
12 date . m_day = 1 4 ; / / e r r o r
13 date . m_year = 2020; / / e r r o r
14
15 return 0;
16 }
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

1 c l a s s DateClass {
2 p u b l i c : / / note use o f p u b l i c keyword here , and th e c o l o n
3 / / p u b l i c , can be accessed by anyone
4 i n t m_month ;
5 i n t m_day ;
6 i n t m_year ;
7 };
8
9 i n t main ( ) {
10 DateClass date ;
11 date . m_month = 1 0 ; / / okay because m_month i s p u b l i c
12 date . m_day = 1 4 ; / / okay because m_day i s p u b l i c
13 date . m_year = 2020; / / okay because m_year i s p u b l i c
14 return 0;
15 }
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

Programacin orientada a objetos (POO)

Regularmente los atributos de una clase son privados y los


mtodos de una clase son pblicos.
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

1 c l a s s DateClass {
2 / / p r i v a t e by d e f a u l t , can o n l y be accessed by o t h e r members
3 i n t m_month ;
4 i n t m_day ;
5 i n t m_year ;
6 public :
7 / / p u b l i c , can be accessed by anyone
8 void setDate ( i n t month , i n t day , i n t year ) {
9 / / setDate ( ) can access th e p r i v a t e members o f th e c l a s s
10 / / because i t i s a member o f th e c l a s s i t s e l f
11 m_month = month ;
12 m_day = day ;
13 m_year = year ;
14 }
15 void p r i n t ( ) {
16 s t d : : c o u t << m_month << "/" << m_day << "/" << m_year ;
17 }
18 };
Algoritmos y Estructuras de Datos

Estructuras y Clases en C++

1 class DateClass {
2 int m_month ;
3 int m_day ;
4 int m_year ;
5
6 public :
7 / / Note th e a d d i t i o n o f t h i s f u n c t i o n
8 void copyFrom ( const DateClass &d ) {
9 / / Note t h a t we can access th e p r i v a t e members o f d d i r e c t l y
10 m_month = d . m_month ;
11 m_day = d . m_day ;
12 m_year = d . m_year ;
13 }
14 };

También podría gustarte