Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "C++ for Java Programmers Chapter 2. Fundamental Daty Types Timothy Budd."— Presentation transcript:

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

2 2 Integers n n 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 n n C++ Integer Internal Representation long and/or short may have the same size as integer

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

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

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

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

7 Timothy Budd7 Examples of Booleans

8 Timothy Budd8 Booleans n. n 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 n n Legacy code can contain different boolean abstractions.

9 Timothy Budd9 Bit Fields n n Seldome used feature n n 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 };

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

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

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

13 Timothy Budd13 Enumeration Values u uCan be converted into integers and can even have their own internal integer values explicitly specified. enum shape {circle=12, square=3, triangle}; n n 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

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

15 Timothy Budd15 The void type n n In Java, used to represent a method or function that does not yield a result. n n 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.

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

17 Timothy Budd17 Arrays n n Not legal to place the square brackets after type as in Java double[ ] limits = {10, 12, 14, 17, 0}; // legal Java, not C++ n n 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;}

18 Timothy Budd18 Structure n n 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; };

19 Timothy Budd19 Unions n 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; }; n Object-oriented languages made unions unnecessary by introducing polymorphic variables

20 Timothy Budd20 Object Values n n 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);

21 Timothy Budd21 Object Values n n 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;

22 Timothy Budd22 Object Values n n 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

23 Timothy Budd23 Functions n n 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);

24 Timothy Budd24 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);

25 Timothy Budd25 Order of Argument Evaluation n n 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); } n In C++, order of argument evaluation is undefined and implement dependent.

26 Timothy Budd26 The function main n n In C++, main is a function outside any class. n n 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 } n n The first command line argument in C++ is always the application name.

27 Timothy Budd27 Altenative main Entry points n n Individual libraries may provide threir own version of main and then require a different entry point. n n 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.


Download ppt "C++ for Java Programmers Chapter 2. Fundamental Daty Types Timothy Budd."

Similar presentations


Ads by Google