Wednesday 9 May 2012

Converting Pointer Parameters in C++ to Java

For the most part, it is quite easy to convert a C++ function that uses pointer parameters into its equivalent Java method. Since Java passes all objects by reference, sometimes the conversion simply requires the removal of C++'s pointer operators. For example, consider this C++ program that reverses the signs of a Coord object, which stores a pair of Cartesian coordinates. The function reverseSign( ) is passed a pointer to the Coord object that will be reversed. As you can see, C++'s *, &, and -> pointer operators are used to perform the operation.


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Reverse the signs of a coordinate - C++ version. 
#include <iostream> 
using namespace std; 
class Coord { 
public: 
int x; 
int y; 
};

// Reverse the sign of the coordinates. 
void reverseSign(Coord *ob) { 
ob->x = -ob->x; 
ob->y = -ob->y; 
} 
int main() 
{ 
Coord ob; 
ob.x = 10; 
ob.y = 20; 
cout << "Original values for ob: "; 
cout << ob.x << ", " << ob.y << "\\n"; 
reverseSign(&ob); 
cout << "Sign reversed values for ob: "; 
cout << ob.x << ", " << ob.y << "\\n"; 
return 0; 
}

This program can be recoded into the following Java version. As you can see, most of the conversion involves the deletion of the C++ pointer operators. Since Java passes objects by reference, changes to the parameter automatically affect the argument.


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Reverse the signs of a coordinate - Java version. 
class Coord {
 int x;
 int y;
};

class DropPointers {
 // Reverse the sign of the coordinates.
 static void reverseCoord(Coord ob) {
  ob.x = -ob.x;
  ob.y = -ob.y;
 }

 public static void main(String args[]) {
  Coord ob = new Coord();
  ob.x = 10;
  ob.y = 20;
  System.out.println("Original values for ob: " + ob.x + ", " + ob.y);
  reverseCoord(ob);
  System.out
    .println("Sign reversed values for ob: " + ob.x + ", " + ob.y);
 }
}



The output from both of these programs is the same and is shown here:

Original values for ob: 10, 20
Sign reversed values for ob: -10, -20

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...