• Viernes 19 de Abril de 2024, 09:27

Autor Tema:  aplicacion de java a c++  (Leído 2749 veces)

dunkelheit

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
aplicacion de java a c++
« en: Miércoles 30 de Septiembre de 2009, 21:51 »
0
Hola bueno estoy q practico con una aplicacion que implemento en java de comparacion de puntos, todo bien me salio pero ahora quiero implementar el mismo programa pero en C++... aca les dejo mi proyecto en java.

Código: Text
  1.  
  2. package prUegafigUras;
  3. public class pUnto {
  4.  
  5.     private double x;
  6.     private double y;
  7.  
  8.     public pUnto () { this.setX(0); this.setY(0);
  9.     }
  10.  
  11.     public pUnto (double x, double y) {
  12.         this.setX(x);
  13.         this.setY(y);
  14.     }
  15.     public boolean equals (Object refo) {
  16.         if(refo instanceof pUnto){
  17.             pUnto otro = (pUnto)refo;
  18.             return((this.x==otro.x)&&(this.y == otro.y));
  19.         }
  20.         else return false;
  21.     }
  22.     public double getX () {
  23.         return x;
  24.     }
  25.     public void setX (double x) {
  26.         this.x = x;
  27.     }
  28.     protected double getY () {
  29.         return y;
  30.     }
  31.     public void setY (double y) {
  32.         this.y = y;
  33.     }
  34.     public String toString () {
  35.         return this.getClass().getSimpleName()+"["+ this.getX()+","+ this.getY()+"]";
  36.     }
  37. }
  38.  
  39.  

Código: Text
  1. package prUegafigUras;
  2.  
  3. public class Demo {
  4.     public static void main (String[] args) {
  5.         pUnto p1= new pUnto();
  6.         pUnto p3 = new pUnto(0,0);
  7.         if(p1.equals(p3))System.out.println("p1=p3");
  8.     }
  9. }
  10.  


Para c++ estoy usando dev c++ 4.9, entonces cree mi proyecto con mi fichero.h y mi cpp

Código: Text
  1.  
  2. using namespace std;
  3.  
  4. class punto {
  5.   private:  double x;
  6.             double y;    
  7.   public:  
  8.          punto();
  9.          punto(double x,double y);
  10.          bool equals(const punto& refo);
  11.          
  12.   private:
  13.           void setX(double x);
  14.           void setY(double y);
  15.   protected:
  16.           double getY();
  17.           double getX();
  18.          
  19.        
  20. };
  21. bool punto::equals(const punto &refo){
  22.      //const punto* prefo = dynamic_cast<const punto*>(&refo);
  23.      punto otro =   (punto) otro;
  24.      return ((this->x == otro.x) && (this->y == otro.y));
  25. }
  26.  
  27. punto::punto() {
  28.      this->setX(0);
  29.      this->setY(0);
  30. }
  31.  
  32. punto::punto(double x,double y) {
  33.      this->setX(x);
  34.      this->setY(y);              
  35. }
  36.  
  37. double punto::getX(){
  38.           return x;          
  39. }
  40.  
  41.  
  42. void punto::setX(double x){
  43.           this->x = x ;
  44.  }
  45.  
  46. double punto::getY () {
  47.         return y;
  48. }
  49. void punto::setY (double y) {
  50.           this->y = y ;
  51. }
  52.  
  53.  

main.cpp

Código: Text
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "punto.h"
  4.  
  5.  
  6. int main(){
  7.     int h;
  8.     punto h1;
  9.     punto* p1 = new punto();
  10.     punto* p2 = new punto(0,0);
  11.    
  12.    //if(p1->equals(p2)){}
  13.  
  14. }
  15.  
  16.  
  17.  

el problema es en comparar p1 con equals p2 y ahi recien imprimir si son iguales o no .... como lo haria en c++ ?? espero que me puedan ayudar. gracias de antemano

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: aplicacion de java a c++
« Respuesta #1 en: Miércoles 30 de Septiembre de 2009, 21:55 »
0
Podes sobrecargar el operador == y entonces hacer un comparacion (p1 == p2).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

dunkelheit

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: aplicacion de java a c++
« Respuesta #2 en: Miércoles 30 de Septiembre de 2009, 22:00 »
0
hola gracias por responder pero al hacer

pero en el metodo equals  

bool punto::equals(const punto &refo){
     //const punto* prefo = dynamic_cast<const punto*>(&refo);
     punto otro =   (punto) otro;
     return ((this->x == otro.x) && (this->y == otro.y));
}

esto no es la sobrecarga ?? o como seria no entiendo mucho  porque recien me inicio en poo.. espero me puedas ayudar .gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: aplicacion de java a c++
« Respuesta #3 en: Miércoles 30 de Septiembre de 2009, 22:05 »
0
No existe ese metodo en C++ por eso en su lugar podes sobrecargar el operador ==, mejor consegui un libro de C++, asi se te va a hacer mas facil.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: aplicacion de java a c++
« Respuesta #4 en: Miércoles 30 de Septiembre de 2009, 22:54 »
0
Hola,

Como lo dice Eternal Idol, el mejor es utilizar el oprador ==.
Aqui esta un ejemplo sencillisimo de una clase punto:
Código: Text
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Punto
  5. {
  6.     Punto( int px = 0, int py = 0 ) : x(px), y(py) {} //constructor
  7.     int x;
  8.     int y;
  9.     bool operator == ( const Punto & pt ) const { return ( x==pt.x && y==pt.y ); } //sobrecarga del operador ==
  10. };
  11.  
  12. int main()
  13. {
  14.     Punto pt1; // mejor instanciar directamente, en la pila (sin hacer un new)
  15.     Punto pt2(2,3);
  16.     if ( pt1 == pt2 )
  17.         cout << "1" << endl;
  18.  
  19.     pt1.x=2;
  20.     pt1.y=3;
  21.     if ( pt1 == pt2 )
  22.         cout << "2" << endl;
  23.    
  24.     cout << "end" << endl;
  25.     cin.get();
  26.     return 0;
  27. }
  28.  

killrazor

  • Miembro activo
  • **
  • Mensajes: 44
    • Ver Perfil
Re: aplicacion de java a c++
« Respuesta #5 en: Miércoles 30 de Septiembre de 2009, 23:12 »
0
Hola,
tampoco estaria mal si los setters y getters los haces inline. Es una de las grandes ventajas de C++ y ganas algo de velocidad. Si programas en C++, ademas, puedes usar los namespace, para que tus librerias tengan paralelismo con los packages de java.

Lo tercero que veo es que usas las clases asi:
Código: C++
  1.  
  2. #     punto* p1 = new punto();
  3. #     punto* p2 = new punto(0,0);
  4.  
  5.  
Pero C++ te da la facilidad de hacerlo de manera estatica o dinamica (que es como tu lo haces, con el new). De manera estatica se puede hacer asi
Código: C++
  1.  
  2. #    punto p1 = punto();
  3.  
  4.  

dunkelheit

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: aplicacion de java a c++
« Respuesta #6 en: Miércoles 30 de Septiembre de 2009, 23:20 »
0
muchas gracias por su ayuda.. me sirvio mucho esta parte

#
#     Punto pt1; // mejor instanciar directamente, en la pila (sin hacer un new)
#     Punto pt2(2,3);

y tmb ver q OPERATOR era una palabra reservada yo pensaba que era un nombre de metodo cualquiera ...u.u errores de principiante ahora si me corrio el programa ..de verdad le agradesco a todos ustedes ^^

dunkelheit

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: aplicacion de java a c++
« Respuesta #7 en: Jueves 1 de Octubre de 2009, 00:32 »
0
disculpenme denuevo pero tratando de implementar mas el programa hize una clase heredada llamada circulo que coje los puntos de la clase punto... en java el equals es asi

Código: Java
  1. public boolean equals (Object refo) {
  2.         if(refo instanceof circUlo){
  3.             pUnto otrop = (pUnto)refo;
  4.             pUnto estepUnto = new pUnto(super.getX(),super.getY());
  5.             circUlo otroc = (circUlo)refo;
  6.             return((super.equals(otrop)) && this.radio == otroc.radio);
  7.         }
  8.         else return false;
  9. }
  10.  

asi que como ustedes me explicaron del operator == trate de hacerlo asi

Código: C++
  1. bool Circulo::operator ==(const Circulo& ref) {  
  2.         Circulo otroc = (Circulo)ref;
  3.         punto otrop = (punto)ref;
  4.         punto estepunto(punto::getX(),punto::getY());
  5.         return((punto::operator ==(otrop)) && (this->radio == otroc.radio));      
  6. }
  7.  

en el main implemente esto

Circulo c1;
Circulo c2(1,1,1);

y cuando pongo la condicion

Código: C++
  1. if(c1 != c2){
  2.           cout<<"c1 != c2"<<endl;      
  3. }
  4. else
  5. {
  6.           cout<<"c1 == c2"<<endl;    
  7. }
  8.  

me sale error : no match for 'operator!=' in 'c1 != c2'

y cuando pongo

Código: C++
  1. if(c1 == c2){
  2.           cout<<"c1 == c2"<<endl;      
  3. }
  4. else
  5. {
  6.           cout<<"c1 != c2"<<endl;    
  7. }
  8.  

me vota verdadero  C1 == C2 cuando deberia ser falso
me e enredado un poco haciendo el operator cuando es de una clase heredada espero que me puedan ayudar . gracias ^^

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: aplicacion de java a c++
« Respuesta #8 en: Jueves 1 de Octubre de 2009, 02:13 »
0
Si quieres utilizar el operador !=, tienes que definirlo. Es igual que con el operador ==.
Luego, no entiendo tu codigo. ¿Porque circulo hereda de punto? Es que vamos, un circulo no tiene nada que ver con un punto ^^

dunkelheit

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: aplicacion de java a c++
« Respuesta #9 en: Jueves 1 de Octubre de 2009, 02:27 »
0
solo lo hago para comparacion de los contructores

Circulo c1;
Circulo c2(1,1,1);
donde los primeros 1,1 son heredados de la clase punto(1,1) en c2 y (0,0) para c1
para ver si son iguales. como les dije cuando pongo ==  sale como si fuera true y en verdad es falso ya q  c1 seria (0,0,0) y c2 (1,1,1)
espero q me hayas entendido gracias

EI: juntando mensajes.

bueno gracias por la ayuda es como dijist en un comienzo declare el operador != y me funciono ..gracias ^^