270 likes | 454 Views
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
E N D
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 • long and/or short may have the same size as integer Timothy Budd
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
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
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
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
Examples of Booleans Timothy Budd
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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