Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

2 Comments Java // Comment thru end of line /* Multi line comments extend until the final */ C++ C++ can use both styles of comments C uses only the second style 2

3 3 Integers n n Java Integer Internal Representation short - 16 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 int is usually the size of native target machine

4 4 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 negative value to an unsigned variable is confusing (but legal) n n Integer division involving negative numbers is platform dependent, but following equality must be preserved: a == (a / b) * b + a % b

5 5 Integers n n Never use the remainder operator with negative values. n n unsigned long a; // for largest integer values signed short int b; // for smallest integers INT_MAX, INT_MIN, SHRT_MAX, etc. are constants which define the limits n n C++ does not recognize the Byte data type in Java. Instead signed char is often used to represent byte- sized quantities.

6 6 Characters n n 8 bit quatity - n n Legal to perform arithmetic 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. (UNICODE > 1 byte)

7 7 Booleans u u Recent addition - bool u u Historical boolean representation u u nonzero – true (usually 1 or -1) u u zero - false u u Integer and pointer types can be used as boolean values. u u Cannot be signed or unsigned.

8 8 Examples of Booleans

9 9 Booleans n. n Even pointer values can be used as boolean 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.

10 10 Bit Fields n n Seldom 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 };

11 Bit Fields: Practical Example n Frequently device controllers and the OS need to communicate at a low level. n Example: Disk Controller Register We could define this register easily with bit fields: n struct DISK_REGISTER { unsigned ready:1; unsigned error_occured:1; unsigned disk_spinning:1; unsigned write_protect:1; unsigned head_loaded:1; unsigned error_code:8; unsigned track:9; unsigned sector:5; unsigned command:5; }; 11

12 12 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 routines generally will not throw an exception on error

13 13 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

14 14 Enumerated Values n n Nothing in commonwith Enumeration class in Java n n enum declaration in C++ enum animal {dog, cat, horse=7, cow}; enum color {red, orange, yellow}; enum fruit {apple, pear, orange}; // error: orange redefined

15 15 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

16 16 Type Casting n Cast operation can be written by type(value) or older (type)value syntax. n Not legal to change a pointer type. int* i;// same as int *i; char* c; c = char* (i); // error: not legal syntax n n static_cast would be even better. double result = static_cast (4)/5;

17 17 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 used as a pointer type to describe a “universal” pointer that can hold a pointer to any type of value. n n Similar to Object in Java

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

19 19 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++ The size 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;}

20 20 Structures & Classes struct myStruct // holds an int, a double, AND a pointer { int i; double d; anObject * p; }; StructClass Members public by defaultMembers private by default In C, data members onlyIn C, no classes

21 21 Unions n Similar to a structure, but the different data fields all share 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

22 Object Values C++ uses copy semantics. class box {// C++ box public: int value; }; box a; // note, no explicit allocation box b; a.value = 7; b = a; a.value = 12; cout << "a value " << a.value << endl; cout << "b value " << b.value << endl ; // a & b are different objects Java uses reference semantics 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); // a & b refer to the same object 22

23 Reference Variables (alias) JAVA box a = new box(); box c = new box(); // java reference assignment box b = a; // reassignment of reference b = new box(); C++ box a; box c; // C++ reference assignment box & b = a; // error: not permitted to reassign reference b = c; 23

24 24 Functions n n C++ permits the definition of functions (and variables) that are not members 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);

25 25 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);

26 26 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 (usually right to left)

27 27 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. n n A lot of old legacy code uses: void main()

28 28 Altenative main Entry points n n Individual libraries may provide their 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.

29 C/C++ compilers n Visual Studio n Borland C++ Builder n Linux cc, c++, gcc, g++ gcc = ccC programs onlygcc = ccC programs only g++ = c++C or C++ programsg++ = c++C or C++ programs Actually all 4 compilers are the same programs making different assumptions based on input file name or contentsActually all 4 compilers are the same programs making different assumptions based on input file name or contents n Dev-C++ a good g++ compiler for PC’s 29

30 Linux G++ Command Syntax g++ filename Input file should have extension.c,.cc,.cxx,.cpp,.c++ Usually C-programs -.c C++ programs -.cpp Although g++ is pretty smart at figuring it out regardless of the extension Most other compilers are less tolerant 30

31 Linux G++ (cont) n Output file by default is a.out n Output filename can be specified with –o g++ -o outfilename filename.cpp 31

32 Simple Programs JAVA public class HelloWorld { public static void main(String[] args) public static void main(String[] args) { System.out.println("Hello World"); { System.out.println("Hello World"); }} C #include #include void main (int argc, char argv[]) { printf(“Hello World\n); } 32

33 Simple Programs C #include #include void main () { printf(“Hello World\n”); } C++ #include #include using namespace std; void main () { cout << “Hello World” << endl; cout << “Hello World” << endl;} 33

34 Actually some would consider a void main function bad form, so … C #include #include int main () { printf(“Hello World\n”); return 0; return 0;} C++ #include #include using namespace std; int main () { cout << “Hello World” << endl; return 0; return 0;} 34


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

Similar presentations


Ads by Google