davidcastrosalinas

Clase 20201006 Composición de Clases + vector de clases.

Oct 6th, 2020
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.70 KB | None | 0 0
  1. /**
  2.  * @file main.cpp
  3.  * @brief Ejemplo de utilización de composición de clases
  4.  * @author David Castro Salinas
  5.  * @date 10/2020
  6.  * @note bajar doxygen http://www.doxys.dk/doxys_homepage/homepage/Download/Download0_dir_description.html
  7.  */
  8. //más información doxygen https://www.scenebeta.com/tutorial/documentando-el-codigo-con-doxygen
  9.  
  10. #include <iostream>
  11. #include <ctime>
  12. using namespace std;
  13.  
  14. /**
  15.  * @class Fecha
  16.  * @brief Clase incompleta, se debe incluir las validaciones
  17.  */
  18. class Fecha {
  19. public:
  20.     Fecha();
  21.     Fecha(int _d, int _m, int _a);
  22.  
  23.     void setAnho(int _valor);
  24.     void setMes(int _valor);
  25.     void setDia(int _valor);
  26.  
  27.     int getAnho();
  28.     int getMes();
  29.     int getDia();
  30.  
  31.     void ver();
  32.  
  33. private:
  34.     int dia;
  35.     int mes;
  36.     int anho;
  37. };
  38.  
  39. Fecha::Fecha(){
  40.     time_t t = time(NULL); //#include <ctime>
  41.     tm* timePtr = localtime(&t);
  42.     anho = timePtr->tm_year+1900;
  43.     mes  = timePtr->tm_mon+1;
  44.     dia  = timePtr->tm_mday;
  45. }
  46.  
  47. Fecha::Fecha(int _d, int _m, int _a): dia(_d), mes(_m), anho(_a){
  48. }
  49.  
  50. void Fecha::setAnho(int _valor){
  51.     this->anho = _valor;
  52. }
  53.  
  54. void Fecha::setMes(int _valor){
  55.     this->mes = _valor;
  56. }
  57.  
  58. void Fecha::setDia(int _valor){
  59.     this->dia = _valor;
  60. }
  61.  
  62. int Fecha::getAnho(){
  63.     return this->anho;
  64. }
  65. int Fecha::getMes(){
  66.     return this->mes;
  67. }
  68. int Fecha::getDia(){
  69.     return this->dia;
  70. }
  71.  
  72. void Fecha::ver() {
  73.     cout << this->dia<<"-"<<this->mes<<"-"<<this->anho;
  74. }
  75.  
  76. /**
  77.  * @class Dirección
  78.  * @brief Permite mantener información de direcciones de usuarios y otras entidades
  79.  */
  80. class Direccion {
  81. public:
  82.     //construtor con parametros por default
  83.     Direccion(string, int);
  84.  
  85.     void setCalle(string valor);
  86.     string getCalle();
  87.  
  88.     void setNumero(int valor);
  89.     int getNumero();
  90.  
  91.     //funciones miembros
  92.     void ver();
  93.     void ver2();
  94.  
  95. protected:
  96. private:
  97.     string calle;
  98.     int numero;
  99. };
  100.  
  101. //construtor parametrizado con valores por default
  102. Direccion::Direccion(string _c = "", int _n = 0):calle(_c), numero(_n) {
  103. };
  104.  
  105. //Implementación de la clase
  106. void Direccion::setCalle(string valor){
  107.     this->calle = valor;
  108. }
  109.  
  110. string Direccion::getCalle(){
  111.     return this->calle;
  112. }
  113.  
  114. void Direccion::setNumero(int valor){
  115.     this->numero = valor;
  116. }
  117.  
  118. int Direccion::getNumero(){
  119.     return this->numero;
  120. }
  121.  
  122. void Direccion::ver(){
  123.     cout <<"direccion:" <<getCalle()<<" #"<<getNumero()<<endl;
  124. }
  125.  
  126. void Direccion::ver2(){
  127.     cout <<this->calle<<" #"<<this->numero<<endl;
  128. }
  129.  
  130. /**
  131.  * @class Rut
  132.  * @brief Permite mantener información de Rut de personas
  133.  */
  134. class Rut{
  135. public:
  136.     Rut(int, char);
  137.  
  138.     int getNumero();
  139.     char getDv();
  140.  
  141.     //métodos de la clase
  142.     void ver();
  143.     bool validar();
  144.  
  145. private:
  146.     int numero;
  147.     char dv;
  148. };
  149.  
  150. Rut::Rut(int _n=0, char _dv=' '):numero(_n), dv(_dv){
  151. };
  152.  
  153. void Rut::ver(){
  154.     cout <<"[RUT]"<<numero<<"-"<<dv<<endl;
  155. }
  156.  
  157. int Rut::getNumero() {
  158.     return this->numero;
  159. }
  160.  
  161. char Rut::getDv() {
  162.     return this->dv;
  163. }
  164.  
  165. //métodos de la clase
  166. bool Rut::validar(){
  167.     //calculo
  168.     if(numero > 0)
  169.         return true;
  170.     else
  171.         return false;
  172. }
  173.  
  174.  
  175. /**
  176.  * @class Persona
  177.  * @brief Esta clase permite
  178.  */
  179. class Persona{
  180. public:
  181.     Persona(string _n = ""):nombre(_n){ };
  182.  
  183.     string getNombre();
  184.     void setNombre(string valor);
  185.     void ver();
  186.  
  187.     void setDireccionPersonal(Direccion valor);
  188.     Direccion getDireccionPersonal();
  189.  
  190.     void setDireccionLaboral(Direccion valor);
  191.     Direccion getDireccionLaboral();
  192.  
  193.     void setRut(Rut valor);
  194.     Rut getRut();
  195.  
  196. private:
  197.     string nombre;
  198.     Direccion direccionPersonal;
  199.     Direccion direccionLaboral;
  200.     Rut rut; //composición de de clases
  201. };
  202.  
  203. string Persona::getNombre(){
  204.     return nombre;
  205. }
  206.  
  207. void Persona::setNombre(string valor){
  208.     this->nombre = valor;
  209. }
  210.  
  211. void Persona::ver(){
  212.     cout <<"[Persona] "<<getNombre()<<endl;
  213.     this->getRut().ver();
  214.     cout <<"[Direccion Personal] ";
  215.     this->direccionPersonal.ver2();
  216.     cout <<"[Direccion Laboral] ";
  217.     this->direccionLaboral.ver2();
  218. };
  219.  
  220. //get y set para composición de clases
  221. void Persona::setDireccionPersonal(Direccion valor){
  222.     this->direccionPersonal = valor;
  223. };
  224.  
  225. Direccion Persona::getDireccionPersonal(){
  226.     return this->direccionPersonal;
  227. }
  228.  
  229. void Persona::setDireccionLaboral(Direccion valor){
  230.     this->direccionLaboral = valor;
  231. };
  232.  
  233. Direccion Persona::getDireccionLaboral(){
  234.     return this->direccionLaboral;
  235. }
  236.  
  237. void Persona::setRut(Rut valor){
  238.     this->rut = valor;
  239. }
  240.  
  241. Rut Persona::getRut(){
  242.     return this->rut;
  243. }
  244.  
  245.  
  246. //funcion externa
  247. /**
  248.  * @fn sonIgualesEnRut
  249.  * @brief Permite revisar las ...
  250.  * @param Persona1
  251.  * @param Persona2
  252.  * @return void
  253.  */
  254. void sonIgualesEnRut(Persona p1, Persona p2){
  255.  
  256.     if( p1.getRut().getNumero() == p2.getRut().getNumero()
  257.         && p1.getRut().getDv() == p2.getRut().getDv()) //funciona
  258.         cout <<"son iguales";
  259.     else
  260.         cout <<"son diferentes";
  261. }
  262.  
  263.  
  264.  
  265. int main()
  266. {
  267.     Fecha fecha;
  268.     fecha.ver();
  269.  
  270.     Rut r1(131313,'K');
  271.     r1.ver();
  272.  
  273.     if(r1.validar() == true)
  274.         cout <<"rut valido"<<endl;
  275.     else
  276.         cout <<"rut inválido"<<endl;
  277.  
  278.     Direccion d1;
  279.     d1.setCalle("Macul");
  280.     d1.setNumero(123);
  281.     d1.ver2();
  282.  
  283.     Direccion d2("Providencia", 1001);
  284.     d2.ver();
  285.  
  286.     Direccion d3;
  287.     d3.ver2();
  288.  
  289.     Direccion d4("Calle nro. 321");
  290.     d4.ver2();
  291.  
  292.     Persona p("David");
  293.     p.setRut(r1);
  294.     p.setDireccionPersonal(d1);
  295.     p.setDireccionLaboral(d2);
  296.     p.ver();
  297.  
  298.     //****FORMA 2****
  299.     Persona p2("Vicente");
  300.     //estoy pasando directamente un objeto
  301.     p2.setRut( Rut(321444, '4') );
  302.     p2.setDireccionPersonal( Direccion("Maipu", 765) );
  303.     p2.setDireccionLaboral( Direccion("Las Condes", 4433) );
  304.     p2.ver();
  305.  
  306.  
  307.     Persona personal[100];
  308.  
  309.     personal[0] = Persona("Pablo");
  310.     personal[0].setRut( Rut(765765, '4'));
  311.     personal[0].setDireccionPersonal(Direccion("Independencia", 8776));
  312.  
  313.     personal[1].setNombre("Estefanía");
  314.     personal[1].setRut( Rut(765765, '4') );
  315.     personal[1].setDireccionLaboral(Direccion("Vitacura", 5555));
  316.  
  317.     for( int i = 0; i < 2; i++)
  318.         personal[i].ver();
  319.  
  320.     sonIgualesEnRut(personal[0] , personal[1]);
  321.  
  322.     /**TAREA1: agregar fecha de nacimiento en la clase Persona **/
  323.     /**TAREA2: Agregar 10 datos de prueba en el vector personal **/
  324.     /**TAREA3: Crear la clase Sexo() e integrarla a la clase Persona **/
  325.     /**TAREA4: Crear una función (método externo) que permita visualizar sólo las mujeres del vector "personal"**/
  326.     /**TAREA5: Crear un función externa que compare 2 Personas y muestre la de mayor edad **/
  327.  
  328.     return 0;
  329. }
  330.  
Add Comment
Please, Sign In to add comment