Getting Started: Create a directory for this lab. You can either download the example programs to your directory from the Web as you go through this (go to the course web page at http://cs.roanoke.edu/Spring2009/CPSC270A to get this web page) OR just copy them all to your directory using cp as follows (assuming you are in your directory for this lab):
cp ~cpsc/public_html/Spring2009/CPSC270A/lab1/*.java . cp ~cpsc/public_html/Spring2009/CPSC270A/lab1/*.cc .
int main() or int main (int argc, char * argv[])
Note that main returns an int. Usually we return 0 but this can be used to return status info to the operating system (0 means all is well!).
#include <iostream> using namespace std;
cout << "Average delay: " << delay << endl;The endl represents the new line (the escape sequence \n may also be used).
cin >> num;The data read in becomes the value of the variable num.
g++ myProg.ccThis creates an executable in a file named a.out. To execute the program you just type the pathname of the file (you must include the dot for your current directory):
./a.out
g++ myProg.cc -o runP
g++ -c myProg.ccThis creates a file named myProg.o. Now link (in this case with the library functions) and create the executable in runP:
g++ myProg.o -o runP
if (n = 0) ...What would happen in Java if you had this in your program? How would it be interpreted in C++?
Exercise: See if you were correct by examining the behavior of JavaIf.java and CPlusIf.cc.
const int DOZEN = 12;This is done inside a function.
#define DOZEN 12This is done outside of a function (before main or, later when we use header files, in the header file).
const int MAX_SIZE = 10; int x[MAX_SIZE];This declaration allocates space for 10 ints. The space is allocated at compile-time and cannot be changed while the program is running. Later we will see a way to allocate space at run-time - dynamic rather than static allocation. C++ allows the programmer to be careless with array subscripts.
Exercise: The programs JavaArrays.java and CPlusArrays.cc use arrays.
OBSERVE: Note the formal parameter list for the function does NOT give the size of the array. Its format is as follows:
int sum (int size, int a[])
Exercise:First study the program ArrayFunctions.cc, then compile and run it. Then add a function that doubles every other element in the array starting at the first one. Note that this function will have void return type. In main add a statement that prints the new array (or add a function to print an array then call it) after the current statement that prints the original sum, the call the sum function to print the new sum.
Exercise:
Node myNode;would declare myNode to be a reference (currently null) to a Node object. The actual object would be created using the new operator. In C++, the above declaration would create the actual Node (no new would be needed).
To declare a reference (pointer) to an object we use *. The following declaration declares myNodePtr as a pointer to a Node:
Node * myNodePtr;The actual node would be constructed using the new operator (details later!).
The & operator gives the address of a variable. Some examples:
myNodePtr = &myNode; int * numPtr; int num = 5; cout << &num << " an address!"; //prints the address of num *numPtr = 13; // *numPtr is the contents of the location pointed // to by numPtr - * is "dereferencing" numPtr
The program PointerFun.cc illustrates some of the properties of the & ("address of") operator and the * operator (when used to declare and when used to dereference a pointer variable). Study it then compile and run it.
To pass by reference in C++ your parameter must be a reference (a pointer). So, for example if you want to pass a Node object to a function so it can change the object you need to pass a pointer to the object - thus the declaration (signature) of the function would be
returnType functionName (Node * theNode); or returnType functionName (Node *);Note: It is standard practice to just list the type of each parameter in the declaration; it isn't necessary at that point to have a formal parameter name.
The call of the function would need to send a pointer to a Node as the actual parameter. Two examples are:
Node * nodePtr; Node actualNode; ... ... functionName(nodePtr) .... ... ... functionName(&actualNode)The & operator gives the address of an object so &actualNode is a pointer to (or reference for) the object actualNode.
Exercise: Write a C++ program that reads in three integers and arranges and prints them in sorted order (ascending). Your program must define and use a function swap that takes two integer parameters and swaps them (so, if a = 20 and b = 5, the call swap(a, b) will result in a = 5 and b = 20).