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