1 / 34

C++ for Java Programmers

C++ for Java Programmers. Chapter 2. Fundamental Data Types Timothy Budd. 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. Integers. Java Integer Internal Representation

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

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

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

  6. Characters • 8 bit quatity - • Legal to perform arithmetic on characters • Character can be signed or unsigned. • w_char - recent addition wide character alias for another interger type such as short.(UNICODE > 1 byte)

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

  8. Examples of Booleans

  9. Booleans • 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 • Legacy code can contain different boolean abstractions.

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

  11. Bit Fields: Practical Example • Frequently device controllers and the OS need to communicate at a low level. • Example: Disk Controller Register We could define this register easily with bit fields: • 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; };

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

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

  14. Enumerated Values • Nothing in commonwith Enumeration class in Java • 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. 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

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

  17. The void type • In Java, used to represent a method or function that does not yield a result. • 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. • Similar to Object in Java

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

  19. 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 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 (inti = 0; i < n; i++) { sum += data[i];} return sum / n; }

  20. Structures & Classes struct myStruct // holds an int, a double, AND a pointer { int i; double d; anObject * p; };

  21. Unions • 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 { inti; double d; anObject * p; }; • 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

  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;

  24. Functions • 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 (inti, int j) { if (i < j) return j; return i; } int x = ...; int y = ...; int z = max(x, y);

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

  27. The function main • In C++, main is a function outside any class. • Always return zero on successful completion of the main program. int main (intargc, char *argv[ ]) { cout << "executing program " << argv[0] << '\n'; return 0; // execution successful } • The first command line argument in C++ is always the application name. • A lot of old legacy code uses: void main()

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

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

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

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

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

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

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

More Related