C++ for Java Programmers Chapter 2. Fundamental Data Types Timothy Budd Comments Java // Comment thru end of line /* Multi line comments extend until the.
Download
Report
Transcript C++ for Java Programmers Chapter 2. Fundamental Data Types Timothy Budd Comments Java // Comment thru end of line /* Multi line comments extend until the.
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
2
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
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 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
4
Integers
Never use the remainder operator with negative
values.
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
C++ does not recognize the Byte data type in Java.
Instead signed char is often used to represent byte5
sized quantities.
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)
6
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.
7
Examples of Booleans
int i = 10;
while (i) { // will loop until i is zero
...
i--;
}
while (*p++ = *q++) ;
bool test = true;
int i = 2 + test; // i is now 3
test = test - 1; // test is now 0, or false
8
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.
9
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
};
10
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; };
11
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
12
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
13
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
14
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
15
Type Casting
Cast operation can be written by type(value)
or older (type)value syntax.
Not legal to change a pointer type.
int* i;
char* c;
// same as int *i;
c = char* (i); // error: not legal syntax
static_cast would be even better.
double result = static_cast<double>(4)/5;
16
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
17
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};
18
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 (int i = 0; i < n; i++) {
sum += data[i];}
return sum / n;
}
19
Structures & Classes
Struct
Class
Members public by default
Members private by default
In C, data members only
In C, no classes
struct myStruct // holds an int, a double, AND a pointer
{
int i;
double d;
anObject * p;
};
20
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 {
int i;
double d;
anObject * p;
};
Object-oriented languages made unions
unnecessary by introducing polymorphic variables
21
Object Values
Java uses reference semantics
C++ uses copy semantics.
class box {
// Java box
public int value;
}
class box {
// C++ box
public: int value;
};
box a = new box();
box b;
box a; // note, no explicit allocation
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.value = 7;
b = a;
a.value = 12;
cout << "a value " << a.value << endl;
cout << "b value " << b.value << endl;
// a & b refer to the same object
// a & b are different objects
22
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
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 (int i, int j)
{
if (i < j) return j;
return i;
}
int x = ...;
int y = ...;
int z = max(x, y);
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);
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
(usually right to left)
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.
A lot of old legacy code uses: void main()
27
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.
28
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’s29
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
Linux G++ (cont)
Output file by default is a.out
Output filename can be specified with –o
g++ -o outfilename filename.cpp
31
Simple Programs
JAVA
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
C
#include <stdio.h>
void main (int argc, char argv[])
{
printf(“Hello World\n);
}
32
Simple Programs
C
C++
#include <stdio.h>
#include <iostream>
using namespace std;
void main ()
{
printf(“Hello World\n”);
}
void main ()
{
cout << “Hello World” <<
endl;
}
33
Actually some would consider a
void main function bad form, so …
C
C++
#include <stdio.h>
#include <iostream>
using namespace std;
int main ()
{
printf(“Hello World\n”);
return 0;
}
int main ()
{
cout << “Hello World” << endl;
return 0;
}
34