1 / 27

C++ for Java Programmers

C++ for Java Programmers. Chapter 2. Fundamental Daty Types Timothy Budd. Integers. Java Integer Internal Representation long - 32 bit integer -32 bit long - 64 bit short int x; // declare x as a small integer long y; // declare y as long integer C++ Integer Internal Representation

gagan
Download Presentation

C++ for Java Programmers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ for Java Programmers Chapter 2. Fundamental Daty Types Timothy Budd

  2. Integers • Java Integer Internal Representation • long - 32 bit • integer -32 bit • long - 64 bit short int x; // declare x as a small integer long y; // declare y as long integer • C++ Integer Internal Representation • long and/or short may have the same size as integer Timothy Budd

  3. C++ Integer • An unsigned integer can only hold nonnegative values int i = -3; unsigned int j = i; cout << j << endl; // will print very large positive integer • Assigning a negaitve value to an unsigned variable is confusing • Integer division involving negative numbers is platform dependent, but following equality must be preserved: a == (a / b) * b + a % b Timothy Budd

  4. Integers • Never use the remainder operator with negative values. unsigned long a; // can hold largest integer value signed short int b; • C++ does not recognize the Byte data type in Java. Instead signed char is often used to represent byte-sized quantities. Timothy Budd

  5. Characters • 8 bit quatity - • Legal to perform arithmatic on characters • Character can be signed or unsigned. • w_char - recent addition wide character alias for another interger type such as short. Timothy Budd

  6. Booleans • Recent addtion - bool • Historical boolean representation • nonzero - true • zero - false • Integer and pointer types can be used as boolean values. • Cannot be signed or unsigned. Timothy Budd

  7. Examples of Booleans Timothy Budd

  8. Booleans • Even pointer value can be used as booleans. False if it is null, true otherwise. aClass * aPtr; // declare a pointer variable ... if (aPtr) // will be true if aPtr is not null • Legacy code can contain different boolean abstractions. Timothy Budd

  9. Bit Fields • Seldome used feature • Programmer can specify explicitly the number of bits to be used. struct infoByte { int on:1; // one-bit value, 0 or 1 int :4; // four bit padding, not named int type: 3; // three bit value, 0 to 7 }; Timothy Budd

  10. Floating Point Values • float, double, long double int i; double d = 3.14; i = d; // may generate a warning • Never use float; use double instead. • math rountines will not throw an exception on error Timothy Budd

  11. Floating Point Values • Always check errno double d = sqrt(-1); // should generate error if (errno == EDOM) ... // but only caught if checked • Java: Nan, NEGATIVE INFINITY, POSITIVE INFINITY Timothy Budd

  12. Enumerated Values • Nothing in commonwith Enumeration calss in Java • enum declaration in C++ enum color {red, orange, yellow}; enum fruit {apple, pear, orange}; // error: orange redefined Timothy Budd

  13. Enumeration Values • Can be converted into integers and can even have their own internal integer values explicitly specified. enum shape {circle=12, square=3, triangle}; • Can be assigned to an integer and incremented, but the resulting value must then be cast back into the enumrated data type before fruit aFruit = pear; int i = aFruit; // legal conversion i++; // legal increment aFruit = fruit(i); // fruit is probably now orange i++; aFruit = fruit(i); // fruit value is now undefined Timothy Budd

  14. Enumeration Values • Cast operation can be written by type(value) or older (type)value syntax. • Not legal to change a pointer type. int * i; char * c; c = char *(i); // error: not legal syntax • static_cast would be even better. Timothy Budd

  15. The void type • In Java, used to represent a method or function that does not yield a result. • In C++, type can also be uses as a pointer type to describe a “universal” pointer that can hold a pointer to any type of value. Timothy Budd

  16. Arrays • An array need not be allocated by using new directive as in Java. • The number of element determined at compile time. int data[100]; // create an array of 100 elements • The number of element can be omitted. char text[ ] = "an array of characters"; int limits[ ] = {10, 12, 14, 17, 0}; Timothy Budd

  17. Arrays • Not legal to place the square brackets after type as in Java double[ ] limits = {10, 12, 14, 17, 0}; // legal Java, not C++ • The limit can be omitted when arrays are passed as arguments to a function. // compute average of an array of data values double average (int n, double data[ ] ) { double sum = 0; for (int i = 0; i < n; i++) { sum += data[i];} return sum / n; } Timothy Budd

  18. Structure • The major differences in C++ between a strunct and a class is that the access is by default public rather than private as in classes. // holds an int, a double, AND a pointer struct myStruct { int i; double d; anObject * p; }; Timothy Budd

  19. Unions • Similar to a structure, but the different data fields all sharre the same location in memory. // can hold an int, a double, OR a pointer union myUnion { int i; double d; anObject * p; }; • Object-oriented languages made unions unnecessary by introducing polymorphic variables Timothy Budd

  20. Object Values • Java uses reference semantics for assignment class box { // Java box public int value; } box a = new box(); box b; a.value = 7; // set variable a b = a; // assign b from a a.value = 12; // change variable a System.out.println("a value " + a.value); System.out.println("b value " + b.value); Timothy Budd

  21. Object Values • C++ uses copy semantics. class box { // C++ box public: int value; }; box a; // note, explicit allocation not required box b; a.value = 7; b = a; a.value = 12; cout << "a value " << a.value << endl; cout << "b value " << b.value << endl; Timothy Budd

  22. Object Values • The concept of reference variable in C++, which is a variable declared as a direct alias. box a = new box(); // java reference assignment box b = a; b = new box(); // reassignment of reference box a; // C++ example box & b = a; // reference assignment box c; b = c; // error: not permitted to reassign reference Timothy Budd

  23. Functions • C++ permits the definition of function that are not member of any class. // define a function for the maximum // of two integer values int max (int i, int j) { if (i < j) return j; return i; } int x = ...; int y = ...; int z = max(x, y); Timothy Budd

  24. Functions • Prototypes are necessary in C++ as every function name with its associated parameter types must be known to the compiler. // declare function max defined elsewhere int max(int, int); Timothy Budd

  25. Order of Argument Evaluation • In Java, argument is evaluated from left to right. String s = "going, "; printTest (s, s, s = "gone "); void printTest (String a, String b, String c) { System.out.println(a + b + c); } • In C++, order of argument evaluation is undefined and implement dependent. Timothy Budd

  26. The function main • In C++, main is a function outside any class. • Always return zero on successful completion of the main program. int main (int argc, char *argv[ ]) { cout << "executing program " << argv[0] << '\n'; return 0; // execution successful } • The first command line argument in C++ is always the application name. Timothy Budd

  27. Altenative main Entry points • Individual libraries may provide threir own version of main and then require a different entry point. • Many Windows graphical systems come with their own main routine already written, which will perform certain initializations before invoking a different function such as WinMain. Timothy Budd

More Related