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