uControl
Mayo 23, 2013, 01:30:40 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Sobrecarga de operadores c++  (Leído 891 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Waldillo
Moderador
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 848


Casado con PIC infiel con ARM


WWW
« : Marzo 16, 2011, 10:46:10 »

Estoy creando una serie de clases de tipos de datos para usarlos en mis programas con ARM.
Estoy tratando de sobrecargar el operador Bitwise NOT ~.

He creado la clase Bool tal que así:

main.cpp

int main( void ) {
  InitializeSystem();
  Bool a;
  ~a;

}

Bool.cpp
#include "Bool.hpp"

/* Default constructor */
Bool::Bool(void) {
  value=0;
}

/* General constructor */
Bool::Bool(bool val) {
  value =val;
}

/* Copy constructor */
Bool::Bool(const Bool& b) {
  value=b.value;
}

/* Operator overloading */
Bool& Bool::operator=(Bool b) {
  value=b.value;
  return(*this);
}

/* Bitwise operators */
/* Bitwise NOT */
Bool& Bool::operator~() {
 
   
    return(*this);
}


Bool operator==(const Bool a ,const Bool b) {
  if(a.value == b.value) {
    return true;
  }
  else {
    return false;
  }
}

Bool operator!=(const Bool a ,const Bool b) {
  if(a.value != b.value) {
    return true;
  }
  else {
    return false;
  }
}

Bool operator>(const Bool a ,const Bool b) {
  if(a.value > b.value) {
    return true;
  }
  else {
    return false;
  }
}

Bool operator<(const Bool a ,const Bool b) {
  if(a.value < b.value) {
    return true;
  }
  else {
    return false;
  }
}

Bool operator&(const Bool a ,const Bool b) {
  if(a.value & b.value) {
    return true;
  }
  else {
    return false;
  }
}

Bool operator|(const Bool a ,const Bool b) {
  if(a.value | b.value) {
    return true;
  }
  else {
    return false;
  }
}


Bool.hpp

#ifndef __BOOL_H__
#define __BOOL_H__

class Bool {
  private:
    bool value;

  public:
    /* Default constructor */
    Bool(void);
    /* General constructor */
    Bool(bool);
    /* Copy constructor */
    Bool(const Bool&);

    /* Operator overloading */
    Bool& operator= (Bool);
   Bool& operator ~();
    friend Bool operator== (const Bool,const Bool);
    friend Bool operator!= (const Bool,const Bool);
    friend Bool operator<  (const Bool,const Bool);
    friend Bool operator>  (const Bool,const Bool);
    friend Bool operator&  (const Bool,const Bool);
    friend Bool operator|  (const Bool,const Bool);
};

#endif

« Última modificación: Marzo 16, 2011, 11:12:43 por Waldillo » En línea

Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« Respuesta #1 : Marzo 16, 2011, 11:05:25 »

Puede ser:

Código:
int operator~ (int Data);

int Bool::operator~ (int Data){

     return(....);
}


 Tongue
En línea

Waldillo
Moderador
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 848


Casado con PIC infiel con ARM


WWW
« Respuesta #2 : Marzo 16, 2011, 11:16:00 »

Perdon me respondiste muy rapido, antes de que copiara el codigo.

yo tengo la definicion asi:

Bool& Bool::operator~() {
 
  
    return(*this);
}


He probado haciendo y no invierte:
Bool& Bool::operator~() {
   ~value;
    return(*this);
}


Bool& Bool::operator~() {
   value =~value;
    return(*this);
}


Este si funciona pero no es lo que quiero hacer.
Bool& Bool::operator~() {
    if (value == 0) {
      value = 1;
    } else  {
       value = 0;
    }
    return(*this);
}
« Última modificación: Marzo 16, 2011, 12:02:44 por Waldillo » En línea

Waldillo
Moderador
PIC16F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 848


Casado con PIC infiel con ARM


WWW
« Respuesta #3 : Marzo 16, 2011, 12:07:59 »

Curiosisimo el resultado de mis pesquisas:

Si declaro en el main la variable global si que me invierte.

main.cpp

Bool b = 0;
int main( void ) {
  InitializeSystem();
  b = ~b;                // b=1
}

Bool.cpp

Bool& Bool::operator~() {
    value = ~value;
    return(*this);
}

Bool.hpp
Bool& operator~ ();

Intuyo que es por el tema del ambito de la clase. Si declaro el objeto Bool b dentro de la funcion main.cpp no me funciona.

Alguien me puede decir como resolver esta cuestion del ambito de las clases, tipo extern o algo así.
En línea

Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.18 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.093 segundos con 28 consultas. (Pretty URLs adds 0.012s, 3q)
loggkey