introduction

39
C++ o Why use C++? ANSI standard Compilers available on every platform All libraries (to my knowledge) have C and/or C++ API o Is C++ better than Fortran? Structure Object orientation Reusable code and library creation Excellent error checking at compile time Fortran becomes more like C++ with every release o Microsoft Visual C++ Development environment Create console (DOS) applications Can develop full-blown Windows applications Introduction

Upload: osias

Post on 06-Jan-2016

23 views

Category:

Documents


0 download

DESCRIPTION

Introduction. Why use C++? ANSI standard Compilers available on every platform All libraries (to my knowledge) have C and/or C++ API - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Introduction

C++

o Why use C++?ANSI standardCompilers available on every platformAll libraries (to my knowledge) have C and/or C++ API

o Is C++ better than Fortran?StructureObject orientationReusable code and library creationExcellent error checking at compile timeFortran becomes more like C++ with every release

o Microsoft Visual C++Development environment Create console (DOS) applicationsCan develop full-blown Windows applications

Introduction

Page 2: Introduction

C++Course layout

Week 1

Learn about C, the subset of C++(not all C covered, some C++ stuff used)

Week 2

C++ proper; classes and objects

Quick question and answer session after each section

Page 3: Introduction

C++Sections

1) Form of a C++ program2) Data types3) Variables and scope4) Operators5) Statements6) Arrays7) Pointers8) Functions9) Structures10) Console I/O11) File I/O12) Pre-processor instructions13) Comments14) Compiling examples under Unix

Lecturer may pop out for a smoke after some sections

Page 4: Introduction

C++Form of a C++ program

#include <iostream.h>

int main(int argc, char* argv[]){ cout << “Hello World\n”;

return 0;}

pre-processor statement

semi-colons

braces enclosing function

All C++ programs must have one, and only one, main function

arguments

function

Example: helloworld

Page 5: Introduction

C++Some differences with Fortran

o C++ is case sensitive: x != X

o You can write it all on one line - statements separated by ‘;’

o There are NO built-in functions but lots of standard libraries

o There is NO built-in I/O but there are I/O libraries

o There are about 60 keywords - need to know about 20?

o C++ supports dynamic memory allocation

o All C++ compilers are accompanied by the C pre-processor

o You can potentially screw up the operating system with C++

Page 6: Introduction

C++

Header files declare the functions to be linked in from libraries…

#include <iostream.h>

#include <math.h>

#include “D:\andy.h”

Including header files and library functions

C++ programs try to be ‘lean and mean’;programmer chooses what to include in the executable

read & write functions

sqrt, log, sin, abs, etc

My stuff that I use frequentlyand don’t want to recreate

If header is in “” the filename must be full (or relative);if in <> pre-processor searches in pre-defined folders

Page 7: Introduction

C++Microsoft Visual C++

o Each program is created within a ‘project’o A project can only contain ONE ‘main’ functiono Basically each individual project is a programo Each project is stored in a foldero To open a project, double-click the ‘.dsw’ file in the foldero Click Help>Index and type a query - massive documentationo Or select (highlight) a keyword and press F1 on keyboard

build

run

VC++ is a big application: a separate course!

Page 8: Introduction

C++Example programs and VC++

Look at http://www.liv.ac.uk/~aeh

o Get VC++ installation disks from Alan (sign license for Mr Gates)

o Projects can be downloaded - they are zipped (PowerZip/WinZip)

o You might need to go to Project>Settings and click Debug tab and set your own path to where the project is stored (I suggest M:\C++\ as the folder to unzip the examples into)

o Experiment with the examples - compilation errors appear in the window below the source window(s)… double-click on the error message to go to the line containing the error.

o You can highlight a keyword (or whatever) and press F1 to get help

o The documentation is huge - and not just about VC++; be selective!

Page 9: Introduction

C++Data types

There are 6 atomic data types:1) char - character (1 byte)2) int - integer (usually 4 bytes)3) float - floating point (usually 4 bytes)4) double - double precision floating point (usually 8 bytes)5) bool - true or false (usually 4 bytes)6) void - explicitly says function does not return a value

and can represent a pointer to any data type

Size of the data types depends on machine architecturee.g. 16 bit, 32 bit or 64 bit words

Other data types are derived from atomic types e.g. long int

Can use ‘typedef’ to alias your own data type names;defining C++ classes creates new types

C++ is a programmer’s language - need to know the basics…

Page 10: Introduction

C++Variables and scope

int a, b, c;a = 1;b = c = 0x3F;

float iAmAFloat = 1.234;double iAmADouble = 1.2e34;

{ int i, a;

for (i=0; i<10; i++) { a = i; int b = i; } b = 2;}

‘a’ declared outsideloop braces

‘a’ used inside braces, OK‘b’ declaredinside braces;‘b’ is in scopeinside braces

‘b’ is unknown outside braces:‘b’ is out of scope, ERROR

Page 11: Introduction

C++Operators

Obvious: +, -, *, /Shorthand: +=, *=, -=, /=Modulus: %Decrement: --Increment: ++Relational: ==, !=, <, >, <=, >=Logical: !, &&, ||, &, |, ^, ~

5%3 evaluates to 2 (the remainder of division)

int a, b;

a++;b--;means the same asa = a + 1;b = b - 1;

Page 12: Introduction

C++

Statements

Statement categories:1) Selection2) Iteration3) Jump4) Expression5) Try (exception handling; look it up)

Statements specify actions within a program. Generallythey are responsible for control-flow and decision making:e.g. if (some condition) {do this} else {do that}

A statement is a part of the program that can be executed

Page 13: Introduction

C++Selection: ‘if’

General form is:if (expression) { statement;}else if (expression) { statement;}...else { statement;}

‘expression’ is any condition that evaluates to ‘true’ or ‘false’‘statement’ could be another ‘if’ i.e. nesting…

bool flag;int a, b;

if (a>0 && b>0) { a = 0; b = 0;}else if (flag) { a = -1;}else { b = -1;}

Page 14: Introduction

C++A note on conditional expressions

A condition is one or more expressions that evaluate to true or false

Expressions can be linked together by logical operators

bool flag;double a;

(!flag)

(a>0.0 && flag)

(a==0.0 || !flag)

(a<0.0 || (flag && a>0.0))

evaluates ‘true’ if flag is ‘false’

evaluates ‘true’ if a iszero or flag is false

Page 15: Introduction

C++Selection: ‘switch’

This statement only works with integers and chars - it only checks for identical values (not less or more than).

Good for using with menu choices…

switch (ch) {case ‘a’: doMenuOptionA(); break;case ‘b’: doMenuOptionB(); break;...}

ch of type ‘char’(could be ‘int’)

control jumps hereif ch equals ‘b’

control jumps toend brace Note! As in ‘if’, there

is NO ‘;’ after braces

This is a label,and so hasa ‘:’ after it

Example: menuchoice

Page 16: Introduction

C++

Iteration: ‘for’ loop

Huge amount of variation allowed, very flexible: generally

for (initialisation; condition; increment) { statements }

int i, a[10];int sum = 0;

for (i=0; i<10; i++) { a[i] = i; sum = sum + i;}

Initially i isset to zero

Keeps looping whilei is less than 10

(i.e. condition is ‘true’)

i increments by oneon each iteration

Page 17: Introduction

C++

Iteration: ‘while’ loop

General form is

while (condition) { statements }

#include <iostream.h>

char c = ‘\0’;

while (c != ‘q’) { cout << “Type a key (q to finish): “; cin >> c;}

cout << “Finished\n”;

use console I/O

initialise the char variable

The loop body will executeforever - until “q” is pressed

Example: typeq

Page 18: Introduction

C++Jump: ‘goto’, ‘return’, ‘break’ and ‘continue’

Personal bigotry: using ‘goto’ just shows bad design; do not use

‘return’ is used to exit a function, usually with a value

int a = 0;

while (true) { a++; if (a >= 10) { break; }}

int count = 0;int i;

for (i=0; i<10; i++) { if (i<3 || i>6) { continue; } count++;}

infinite loop

jump out of loop(if loops nested, onlyjump out of inner)

Jump to beginningof loop and beginnext iteration

Page 19: Introduction

C++Expressions

An expression statement is anything that ends with a ‘;’

func();

a = b + c;

;

float root = (-b + sqrt(b*b - 4.0*a*c)) / (2.0*a);

int flagset = 0x0001 | 0x0100;

bool check = (flag & 0x0001);

function call

empty statement - perfectly valid

bitwise OR of two integers

bitwise AND of two ints; result is true or false

Page 20: Introduction

C++Arrays (I)

o In C++ arrays can be either fixed or variable length; there is a very close link between arrays and pointers

o An array can be of any data type, including your own

o C++ arrays are indexed from 0; the last element at N-1

int a[5];

for (i=0; i<10; i++) { a[i] = i;}

first element at 0, last at 4

may crash when i>4; no bounds checking by default

Example: bubble

Page 21: Introduction

C++Arrays (II)

Multi-dimensional arrays specified by:

double elements[100][100][100]; // about 8Mb!

for (i=0; i<100; i++) { for (j=0; j<100; j++) { for (k=0; k<100; k++) { elements[i][j][k] = initElement(i, j, k); } }}

function that returns a ‘double’

Arrays can be initialised with contents:

float coeff[] = { 1.2, -5.456e-03, 200.0, 0.000001 };

compiler sizes array automatically

Page 22: Introduction

C++Arrays (III)

Character strings are arrays of type charMany functions dedicated to manipulating strings <string.h>C++ offers the standard ‘string’ classMany library functions require you to use char* variables

char myName[128];int len;

strcpy(myName, “Andy Heath”);

char* fullname = myName;len = strlen(fullname);

char* surname = &myName[5];len = strlen(surname);

char* argv[];

A n d y H e a t h \0 ? ? ?

terminator

length is 10

length is 5

array of strings passed from command line

Example: cstring

Page 23: Introduction

C++Pointers (I)

o A pointer is a variable; just like any other type of variable

o The variable contains the memory address of a certain data type

o The address is in either stack memory or heap memory

o Any atomic or user-defined data type can be pointed to

o The value of the pointer’s data type can be obtained

o Obtaining the value pointed to in memory is called dereferencing

o Two unary operators are used frequently with pointers: * and &

o Using pointers incorrectly will almost certainly crash things

o Pointers are the most useful feature of C++ (in my opinion)

Page 24: Introduction

C++Pointers (II)

1000

1008

1012

1016

1020

1024

1028

1004

stackmemoryaddress

3.142

7

float a = 3.142;float* pa = &a;

int c = 7;int* pc = &c;int* pc1 = pc + 1;*pc1 = 22;

double b = 1.2e12;double* pb = &b;double bb = *pb; 1.2e12

pa = 1000

?22?

bb = 1.2e12

potentially disastrous: somethingimportant may be at address 1028!

Page 25: Introduction

C++Pointers (III)

The name of an array is also a pointer:

float e[10], *pe;

pe = e = &e[0];

Can use a pointer as index into array:

for (int i=0; i<10; i++) { *pe = float(i); pe++;}

Stack memory is allocated at compile time, when the size ofan object (e.g. an array) is already known. Unless declared ‘static’,

stack memory is freed when object is no longer in scope. E.g. when afunction returns, the memory it’s variables occupied will be reused.

Page 26: Introduction

C++Pointers (IV)

The best thing about pointers: they can refer to ‘new’ objectsthat persist in the ‘heap’ memory and do not

disappear when scope changes

float* pElements = new float[10];

The only way to free up this sort of memory is to ‘delete’ it:

delete[] pElements;

Do NOT use pElements after it has been deleted - almostcertain crash, but probably not at the time you refer to it!

Pointers are used with C++ class objects, structures, functions,library functions, system calls - just about everything…

Page 27: Introduction

C++Functions (I)

A function is a distinct body of code that returns a value -even if the value is nothing at all

// this is some functionint func(double a, double b){ if (a < b) { return -1; } else { return 1; }}

// this is the main functionint main(int argc, char* argv[]){ return func(1.0, 2.0);}

Page 28: Introduction

C++Functions (II)

This is the same function - the code is written in a different order

int func(double, double);

// this is the main functionint main(int argc, char* argv[]){ return func(1.0, 2.0);}

// this is some functionint func(double a, double b){ if (a < b) { return -1; } else { return 1; }}

Prototype(this is what isin header files)

Page 29: Introduction

C++Functions (III)

o A function returns a value (except if it is of type ‘void’)o The value is specified with the ‘return’ keywordo The value returned must be the same type as the function

double logit(double z){ return log(z);}

int addInts(int a, int b, int c){ return a + b + c;}

A function can call itself - recursion

int factorial(int n){ if (n > 0) { return n*factorial(n-1); } else { return 1; }} Example: factorial

Page 30: Introduction

C++Functions (IV)

Arguments passed to functions in one of three ways:1) By value (default)2) By reference3) Thru a pointer to the argument

{ float x = 2.0f;

func(x);

cout << x;}

void func(float x){ x = pow(10, x);}

{ float x = 2.0f;

func(x);

cout << x;}

void func(float& x){ x = pow(10, x);}

{ float x = 2.0f;

func(&x);

cout << x;}

void func(float* px){ *px = pow(10, *px);}

C++ default Like Fortran Thru a pointer

Page 31: Introduction

C++Functions (V)

The name of a function is also a pointer to it, so youcan pass the function into another function…

e.g. quick sort ‘qsort’ routine in the standard library <stdlib.h>

‘qsort’ uses a clever and efficient algorithm to order an array:You define the function which compares array elements -because only you know how to do the comparison!

int myCmp(const void* e1, const void* e2){ // return -1, 0 or 1 depending on <, == or >}

Call ‘qsort’ like this:

qsort(myArray, nMyArray, sizeElement, myCmp);

void* int

int

(int*)(const void*, const void*)

Example: qsortExample: varfunc

Page 32: Introduction

C++Structures (I)

A structure is a way of grouping together differenttypes of data to create a new type of data object

struct myRecord { char* surname; char* firstName; int nDaysOff; float salary;};

int main(int argc, char* argv[]){ struct myRecord rec;

rec.surname = “Heath”; rec.salary = 1000.0;}

Define the type ‘struct myRecord’

rec is a variable oftype ‘struct myRecord’

A dot is used to specifyindividual fields in the structure

Page 33: Introduction

C++Structures (II)

o Can have arrays of a structure typeo Can access a structure thru a pointero Can have structures nested within another structure

void func(struct myRecord* pRec){ pRec->surname = “Gates”; pRec->salary = 1.0e10;}

int main(int argc, char* argv[]){ struct myRecord gates;

func(&gates);}

Use -> to accessfields thru pointer

to a structure

gates is of typestruct myRecord

Use the ‘&’ operator topass a pointer to gatesinto function func

Example: structure

Page 34: Introduction

C++Structures (III)

o Structures are a C concepto Replaced in C++ with the ‘class’ concepto Objects of a class can be completely defined as a new data type

class Andy { // definition of stuff};

int main(int argc, char* argv[]){ Andy a, b, c;

a = b + c; cout << a;}

a, b and c areof type Andy

If we choose to, we can give ‘Andy’objects the ability to do addition,

and to write themselves to the console

but that’s for NEXT WEEK…

Page 35: Introduction

C++Console I/O

o The console is a command window (DOS or terminal)o C++ uses the ‘<<’ and ‘>>’ operators to write and reado C++ recognises what sort of data you want to read or write and acts accordinglyo Use “manipulators” to format I/O - look it up!

#include <iostream.h>

int main(int argc, char* argv[]){ char* name = “Andy Heath”; float number = 1.2345; int menuChoice;

cin >> menuChoice;

cout << name << “ “ << number << “\n”;

return 0;}

read an ‘int’ token fromthe keyboard - tokens

separated by white-space(space, newline, tab)

write variables and constants to screen;use newline (‘\n’) to finish line

Page 36: Introduction

C++File I/O

o Similar to console I/Oo Different types of stream for input and outputo File streams defined in <fstream.h>

ifstream inFile;ofstream outFile;float number;

inFile.open(“readme.txt”);outFile.open(“writeme.txt”);

while (!inFile.eof()) { inFile >> number; outFile << number;}

inFile.close();outFile.close();

Keep going until theend of file is reached

These are methods of the baseclasses ‘ios’ and ‘fstream’…‘inheritance’ covered next week!

Example: copyFile

Page 37: Introduction

C++Pre-processor instructions

Pre-processor instructions allow the programmer to choosewhat source code the compiler sees - very useful for writing

programs that are portable between Unix and Windows

#ifdef WIN32#include <someWindowsHeader.h>void myFunc(/* Windows data types */);#else#include <someUnixHeader.h>void myFunc(/* Unix data types */);#endif

Can use verbose output in a function to help with debugging

#ifdef _DEBUG cout << “Debug: at end of ‘func1’ x = “ << x << “\n”;#endif

Look at Project>Settings and the “C/C++” tab for Pre-processer defs

Page 38: Introduction

C++Comments

Two types of comments:

/* blah blah blah */

// blah blah blah

/* * this function computes the square root of infinity */double sqrtInf(){ double infinity = NaN; // is infinity a number?

return 1.0; // near enough since I haven’t got a clue}

VC++ colours comments green by default

Page 39: Introduction

C++And finally…

To build an example on Unix (Linux, Solaris, whatever)

o Copy the example.cpp file on to Unix machine

o Rename the file with the command ‘mv example.cpp example.C’

o Compile the program with ‘g++ -o example example.C’*

o Run the program by typing ‘example’

*There is a possibility that g++ is not installed on some people’s systems

Bye bye…