Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @file main.cpp
- * @brief Ejemplo de utilización de composición de clases
- * @author David Castro Salinas
- * @date 10/2020
- * @note bajar doxygen http://www.doxys.dk/doxys_homepage/homepage/Download/Download0_dir_description.html
- */
- //más información doxygen https://www.scenebeta.com/tutorial/documentando-el-codigo-con-doxygen
- #include <iostream>
- #include <ctime>
- using namespace std;
- /**
- * @class Fecha
- * @brief Clase incompleta, se debe incluir las validaciones
- */
- class Fecha {
- public:
- Fecha();
- Fecha(int _d, int _m, int _a);
- void setAnho(int _valor);
- void setMes(int _valor);
- void setDia(int _valor);
- int getAnho();
- int getMes();
- int getDia();
- void ver();
- private:
- int dia;
- int mes;
- int anho;
- };
- Fecha::Fecha(){
- time_t t = time(NULL); //#include <ctime>
- tm* timePtr = localtime(&t);
- anho = timePtr->tm_year+1900;
- mes = timePtr->tm_mon+1;
- dia = timePtr->tm_mday;
- }
- Fecha::Fecha(int _d, int _m, int _a): dia(_d), mes(_m), anho(_a){
- }
- void Fecha::setAnho(int _valor){
- this->anho = _valor;
- }
- void Fecha::setMes(int _valor){
- this->mes = _valor;
- }
- void Fecha::setDia(int _valor){
- this->dia = _valor;
- }
- int Fecha::getAnho(){
- return this->anho;
- }
- int Fecha::getMes(){
- return this->mes;
- }
- int Fecha::getDia(){
- return this->dia;
- }
- void Fecha::ver() {
- cout << this->dia<<"-"<<this->mes<<"-"<<this->anho;
- }
- /**
- * @class Dirección
- * @brief Permite mantener información de direcciones de usuarios y otras entidades
- */
- class Direccion {
- public:
- //construtor con parametros por default
- Direccion(string, int);
- void setCalle(string valor);
- string getCalle();
- void setNumero(int valor);
- int getNumero();
- //funciones miembros
- void ver();
- void ver2();
- protected:
- private:
- string calle;
- int numero;
- };
- //construtor parametrizado con valores por default
- Direccion::Direccion(string _c = "", int _n = 0):calle(_c), numero(_n) {
- };
- //Implementación de la clase
- void Direccion::setCalle(string valor){
- this->calle = valor;
- }
- string Direccion::getCalle(){
- return this->calle;
- }
- void Direccion::setNumero(int valor){
- this->numero = valor;
- }
- int Direccion::getNumero(){
- return this->numero;
- }
- void Direccion::ver(){
- cout <<"direccion:" <<getCalle()<<" #"<<getNumero()<<endl;
- }
- void Direccion::ver2(){
- cout <<this->calle<<" #"<<this->numero<<endl;
- }
- /**
- * @class Rut
- * @brief Permite mantener información de Rut de personas
- */
- class Rut{
- public:
- Rut(int, char);
- int getNumero();
- char getDv();
- //métodos de la clase
- void ver();
- bool validar();
- private:
- int numero;
- char dv;
- };
- Rut::Rut(int _n=0, char _dv=' '):numero(_n), dv(_dv){
- };
- void Rut::ver(){
- cout <<"[RUT]"<<numero<<"-"<<dv<<endl;
- }
- int Rut::getNumero() {
- return this->numero;
- }
- char Rut::getDv() {
- return this->dv;
- }
- //métodos de la clase
- bool Rut::validar(){
- //calculo
- if(numero > 0)
- return true;
- else
- return false;
- }
- /**
- * @class Persona
- * @brief Esta clase permite
- */
- class Persona{
- public:
- Persona(string _n = ""):nombre(_n){ };
- string getNombre();
- void setNombre(string valor);
- void ver();
- void setDireccionPersonal(Direccion valor);
- Direccion getDireccionPersonal();
- void setDireccionLaboral(Direccion valor);
- Direccion getDireccionLaboral();
- void setRut(Rut valor);
- Rut getRut();
- private:
- string nombre;
- Direccion direccionPersonal;
- Direccion direccionLaboral;
- Rut rut; //composición de de clases
- };
- string Persona::getNombre(){
- return nombre;
- }
- void Persona::setNombre(string valor){
- this->nombre = valor;
- }
- void Persona::ver(){
- cout <<"[Persona] "<<getNombre()<<endl;
- this->getRut().ver();
- cout <<"[Direccion Personal] ";
- this->direccionPersonal.ver2();
- cout <<"[Direccion Laboral] ";
- this->direccionLaboral.ver2();
- };
- //get y set para composición de clases
- void Persona::setDireccionPersonal(Direccion valor){
- this->direccionPersonal = valor;
- };
- Direccion Persona::getDireccionPersonal(){
- return this->direccionPersonal;
- }
- void Persona::setDireccionLaboral(Direccion valor){
- this->direccionLaboral = valor;
- };
- Direccion Persona::getDireccionLaboral(){
- return this->direccionLaboral;
- }
- void Persona::setRut(Rut valor){
- this->rut = valor;
- }
- Rut Persona::getRut(){
- return this->rut;
- }
- //funcion externa
- /**
- * @fn sonIgualesEnRut
- * @brief Permite revisar las ...
- * @param Persona1
- * @param Persona2
- * @return void
- */
- void sonIgualesEnRut(Persona p1, Persona p2){
- if( p1.getRut().getNumero() == p2.getRut().getNumero()
- && p1.getRut().getDv() == p2.getRut().getDv()) //funciona
- cout <<"son iguales";
- else
- cout <<"son diferentes";
- }
- int main()
- {
- Fecha fecha;
- fecha.ver();
- Rut r1(131313,'K');
- r1.ver();
- if(r1.validar() == true)
- cout <<"rut valido"<<endl;
- else
- cout <<"rut inválido"<<endl;
- Direccion d1;
- d1.setCalle("Macul");
- d1.setNumero(123);
- d1.ver2();
- Direccion d2("Providencia", 1001);
- d2.ver();
- Direccion d3;
- d3.ver2();
- Direccion d4("Calle nro. 321");
- d4.ver2();
- Persona p("David");
- p.setRut(r1);
- p.setDireccionPersonal(d1);
- p.setDireccionLaboral(d2);
- p.ver();
- //****FORMA 2****
- Persona p2("Vicente");
- //estoy pasando directamente un objeto
- p2.setRut( Rut(321444, '4') );
- p2.setDireccionPersonal( Direccion("Maipu", 765) );
- p2.setDireccionLaboral( Direccion("Las Condes", 4433) );
- p2.ver();
- Persona personal[100];
- personal[0] = Persona("Pablo");
- personal[0].setRut( Rut(765765, '4'));
- personal[0].setDireccionPersonal(Direccion("Independencia", 8776));
- personal[1].setNombre("Estefanía");
- personal[1].setRut( Rut(765765, '4') );
- personal[1].setDireccionLaboral(Direccion("Vitacura", 5555));
- for( int i = 0; i < 2; i++)
- personal[i].ver();
- sonIgualesEnRut(personal[0] , personal[1]);
- /**TAREA1: agregar fecha de nacimiento en la clase Persona **/
- /**TAREA2: Agregar 10 datos de prueba en el vector personal **/
- /**TAREA3: Crear la clase Sexo() e integrarla a la clase Persona **/
- /**TAREA4: Crear una función (método externo) que permita visualizar sólo las mujeres del vector "personal"**/
- /**TAREA5: Crear un función externa que compare 2 Personas y muestre la de mayor edad **/
- return 0;
- }
Add Comment
Please, Sign In to add comment