how a computer stores data in its internal memory ram (random-access memory) - temporary rom...

88

Upload: delphia-bryan

Post on 19-Jan-2016

214 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes
Page 2: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

How a computer stores data in its internal memory RAM (Random-Access Memory) -

temporary ROM (Read-Only Memory) – non volatile Store data in bytes

How you store data temporarily Create variables based on fundamental

types (bool, char, int, float) constants: #define CONSTNAME value sizeof()

Page 3: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

TYPE SIZE VALUES

bool 1 byte true (1) or false (0)

char 1 byte ‘a’ to‘z’ , ‘A’ to ‘Z’, ‘0’ to ‘9’, space, tab, and so on

int 4 bytes -2,147,483,648 to 2,147,483,647

short 2 bytes -32,768 to 32,767

long 4 bytes -2,147,483,648 to 2,147,483,647

float 4 bytes + - (1.2 x 10^-38 to 3.4 x 10^38)

double 8 bytes +- (2.3 x 10^-308 to -1.7 x 10^308)

Page 4: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

What do each of the following evaluate to?

1. long elves = 8;int dwarves = 8;if(elves==dwarves) //true or false?if(elves!=0) //true or false?

2. int elves = 4;int dwarves = 5;if(dwarves > (2/3)) //true or false?

3. if(0 < x < 99) //true or false?4. if(0<= (0<1))//true or false?

Page 5: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

What do each of the following evaluate to?1. long elves = 8;

int dwarves = 8;if(elves==dwarves) //trueif(elves!=0) //true

2. int elves = 4;int dwarves = 5;if(dwarves > (2/3)) //true

3. if(0 < x < 99) //true …TRUE (1) and FALSE (0) < 99

4. if(0<= (0<1))//true

Page 6: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

if(condition)statement;

else if (condition)statement;

condition ? expr1 : expr2 ex. z = ( x > y ) ? y : x ; Can we do next statement?

(x>y) ? cout << “x is greater than y.” : cout << “x isn’t greater than y.”;

Page 7: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

switch(expression){case expr1:

statement;break;

case expr2:statement;break;

case expr3:statement;break;

default:statementsbreak;

}

Page 8: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

while (condition){

statements;You need to maintain a state to break loop.}

do{

statements;You need to maintain a state to break loop.}while(condition);

Page 9: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

for (initialization; condition; expression){

statements;} Incrementing: Prefix and Postfixint x = 5;int y = 6;int z = y++ //z=6, y=7 postfix

operator int z = ++x //z=6, x=6 prefix

operator

Page 10: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Keyword Purpose

break Exits the nearest enclosing “switch” statement or iteration statement

continue Starts the next loop of the nearest enclosing iteration statement

goto Jumps to a particular place in your code

return Ends a function and returns a value

Page 11: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Can you write a program that prints out the following?

0 1 2 3 4 5 6 7 8 9

Page 12: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

for ( int count = 0; count < 10; count ++)

{cout <<count<<“”;

}

Page 13: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

1. Write a conditional statement that will assign x/y to x if y doesn’t equal 0.

2. Write a while loop that calculates the summation of positive integers from 1 to some number n.

3. Write a conditional statement that assigns x*y if x is even; otherwise , if x is odd and y doesn’t equal 0, assign x to x/y; if neither of the preceding cases is true, output to the screen that y is equal to 0.

Page 14: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Function declarationFunction definitionFunction call

Page 15: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream>using namespace std;

int add(int, int);

int main(void){

int number1, number2;cout << “Enter the first value to be summed:”;cin >> number1;cout << “\nEnter the second:”;

cin >> number2;cout << “\n The sum is: “ << add (number1, number2) <<endl;

}

int add(int a, int b){return a+b;}

Page 16: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Write a function, called multiply that multiplies two numbers and returns the result

Page 17: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <stdio.h>#include<stdlib.h>

union NumericType{ int iValue; long lValue; double dValue; };

int main(){ union NumericType Values; // iValue = 10 Values.iValue=9; printf("%d\n", Values.iValue); Values.dValue = 3.1416; printf("%f\n", Values.dValue); system("pause");}

Output:93.1416

Page 18: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes
Page 19: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Please enter how long your name is: 21Please enter your name:NawafHello Nawaf

Please enter how long your name is: -7Failed allocation memory

Page 20: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes
Page 21: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

int *n;int * n1;n=( int * ) calloc(5, sizeof(int)); // Reserves a block of memory for 5 integers

//Decide you need to reallocate more memory later in the program

n1= (int *) realloc(n, 10 * sizeof(int));//allocate 10 integers instead of 5if (n1!=NULL){

n=n1; }else printf("Out of memory!");

realloc() returns null if unable to complete or a pointer to the newly reallocated memory.

Page 22: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Do you know the syntax for each of these, used to read and write to data files?

Pointers: think of it as the memory address of the file

fopen()

fclose()

fscanf()

fprintf()

Page 23: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

fopen() returns a FILE pointer back to the pRead variable

#include <cstdio>

Main(){

FILE *pRead;pRead = fopen(“file1.dat”, “r”);

if(pRead == NULL) printf(“\nFile cannot be opened\n”);else printf(“\nFile opened for reading\n”);fclose(pRead);

}

Page 24: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

int main (){ FILE * pFile; char c; pFile=fopen("alphabet.txt","wt"); for (c = 'A' ; c <= 'Z' ; c++) { putc (c , pFile);//works like fprintf } fclose (pFile); return 0;}

Page 25: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes
Page 26: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Pretty basic. Always close files when you use fopen.

Page 27: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Reads a single field from a data file

“%s” will read a series of characters until a white space is

found

can do

fscanf(pRead, “%s%s”, name, hobby);

Page 28: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <stdio.h>Main(){ FILE *pRead;

char name[10]; pRead = fopen(“names.dat”, “r”);

if( pRead == NULL ) printf( “\nFile cannot be opened\n”); else printf(“\nContents of names.dat\n”); fscanf( pRead, “%s”, name );

while( !feof(pRead) ) { // While end of file not reached

printf( “%s\n”, name ); // output content of name

fscanf( pRead, “%s”, name ); // scan from file next string

} fclose(pRead);}

Page 29: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Kelly 11/12/86 6 LouisvilleAllen 04/05/77 49 AtlantaChelsea 03/30/90 12Charleston

Can you write a program that prints out the contents of this information.dat file?

Page 30: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <stdio.h>

Main(){ FILE *pRead;

char name[10]; char birthdate[9]; float number; char hometown[20];

pRead = fopen(“information.dat”, “r”);

if( pRead == NULL ) printf( “\nFile cannot be opened\n”); else fscanf( pRead, “%s%s%f%s”, name, birthdate, &number,

hometown );

while( !feof(pRead) ) { printf( “%s \t %s \t %f \t %s\n”, name, birthdate, number,

hometown ); fscanf( pRead, “%s%s%f%s”, name, birthdate, &number,

hometown ); }

fclose(pRead);}

Page 31: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

The fprintf() function sends information (the arguments) according to the specified format to the file indicated by stream. fprintf() works just like printf() as far as the format goes.

Page 32: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <stdio.h>

Main(){

FILE *pWrite;

char fName[20];char lName [20];float gpa;

pWrite = fopen(“students.dat”,”w”);

if( pWrite == NULL )printf(“\nFile not opened\n”);

elseprintf(“\nEnter first name, last name, and GPA ”);printf(“separated by spaces:”);

scanf(“%s%s%f”, fName, lName, &gpa);fprintf(pWrite, “%s \t %s \t % .2f \n”, fName, lName, gpa);fclose(pWrite);

}

Page 33: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Can you write a program that asks the user for their Name Phone Number Bank account balanceAnd then prints this information to a data file called accounts.dat ?

Page 34: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Summary Include #include <iostream> directive

at beginning of program Use cin to take data from user Use cout to display data on screen▪ Display multiple strings and integers in the

same cout statement by separating items with <<

Page 35: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream>#include<string>using namespace std;

string name = “”;

int main(void){

cout<<“What is your name?”;cin>>name;cout<<endl<<“Hello”<<name.c_str();return 0;

}

Page 36: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream>using namespace std;int x = 25;string str2 = “This is a test”;

int main( void ){

cout<<“Test”<<1<<2<<“3”;cout<<25 %7<<endl<<str2.c_str();return 0;

}

Page 37: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Test 1234This is a test

Page 38: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Declare classes Create objects

3 MAIN PRINCIPLES OF OOP Data abstraction – hiding data members and

implementation of a class behind an interface so that the user of the class corrupt that data

Encapsulation – each class represents a specific thing or concept. Multiple classes combine to produce the whole

Polymorphism-objects can be used in more than one program

Page 39: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Classes are general models from which you can create objects

Classes have data members either data types or methods

Classes should contain a constructor method and a destructor method

See handout for example of a program that utilizes a class

Page 40: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

class ClassName{

memberList};

memberList can be either data member declarations or method declarations

Page 41: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Class Bow{

//data member declarationsstring color;bool drawn;int numOfArrows;

Bow(string aColor); //constructor~Bow(); //destructor

//methodsvoid draw();int fire();

};

Page 42: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Return_type ClassName::methodName(argumentList)

{methodImplementation

}

Page 43: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

//draws the bowVoid Bow::draw(){

drawn = true;cout<< “The “<<color<<“bow has been drawn.”<<endl;

}

Page 44: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

ArraysPointers

Page 45: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

data_type array_name [number-of-elements];

Two Dimensional Arrayarray_type array_name [number_of_ROWS]

[number_of_COLUMNS];

Page 46: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

type* pointer_name;

ex. int my_int;int* my_int_pointer =

&my_int;

Assigns the address of my_int to the pointer

Page 47: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Copying strings from one to another char* strcpy(char* p, const char* q); char s[6];

strcpy(s, “Hello”);

To combine strings char* strcat(char* p, const char* q); char s[12] = “Hello”

strcat(s, “World”);

Page 48: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

To copy n characters from q to the of p. char* strncpy(char* p, const char* q,

int n); char s [7] = “Say “;

char t[] = “Hi”;strncpy (s, t, 2)

Output:Hiy

Page 49: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Can you write a program using C++ that uses a FOR loop to initialize a 2D array that looks like the following {0,5,10,15}{0,2,4,6}

Page 50: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include<iostream>using namespace std;int main(){ int array[2][4], , row, column; for(row=0;row<2;row++) for(column=0;column<4;column++){ if(row==0) array[row][column]=column*5; else if(row==1) array[row][column]=column*2; } for(row=0; row<2; row++){ for(column =0; column <4; column ++) cout<<array[row][column]<<" "; cout<<endl; }system("pause");return 0;}

Page 51: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Basic framework for a programHow to CommentHow to PrintHow to store variablesHow to Print stored variablesHow to find the size of a variableHow to convert from one data type

to anotherHow to Declare Constants

Page 52: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

class aClass // Base class{

public:int anInt;

}

class aDerivedClass : public aClass //Derived class

{protected:

float aFloat;};

Page 53: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream.h>enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };class Mammal{public: Mammal(); // constructors ~Mammal(); //destructor //accessorsint GetAge()const;void SetAge(int);int GetWeight() const;void SetWeight();//Other methodsvoid Speak();void Sleep();protected:int itsAge;int itsWeight;};class Dog : public Mammal {public: Dog(); // Constructors~Dog(); // AccessorsBREED GetBreed() const; void SetBreed(BREED); // Other methods // WagTail(); // BegForFood(); protected: BREED itsBreed;};

Animals

Mammals

Reptiles

Horse Dog

HoundTerrie

r

Yorkie Cairn

Page 54: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Private members are not available to derived classes. You could make itsAge and itsWeight public, but that is not desirable. You don't want other classes accessing these data members directly.

What you want is a designation that says, "Make these visible to this class and to classes that derive from this class." That designation is protected. Protected data members and functions are fully visible to derived classes, but are otherwise private.

Page 55: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes
Page 56: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

When do we need to override functions? If you are a programmer example in your

slides. If we consider “Woof” of the dog as speak

example. When a derived class creates a function

with the same return type and signature as a member function in the base class, but with a new implementation, it is said to be overriding that method.

Page 57: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream.h> enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };class Mammal {public:// constructors Mammal() { cout << "Mammal constructor...\n"; } ~Mammal() { cout << "Mammal destructor...\n"; }//Other methodsvoid Speak()const { cout << "Mammal sound!\n"; }void Sleep()const { cout << "shhh. I'm sleeping.\n"; } protected: int itsAge; int itsWeight; };

class Dog : public Mammal {public: // Constructors Dog(){ cout << "Dog constructor...\n"; } ~Dog(){ cout << "Dog destructor...\n"; } // Other methodsvoid WagTail() { cout << "Tail wagging...\n"; }void BegForFood() { cout << "Begging for food...\n"; }void Speak()const { cout << "Woof!\n"; } // This function is overriding the base class Speak() function private: BREED itsBreed;};int main() { Mammal bigAnimal; Dog fido; bigAnimal.Speak(); fido.Speak(); getchar(); return 0;}

Page 58: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

When you overload a method, you create more than one method with the same name, but with a different signature. When you override a method, you create a method in a derived class with the same name as a method in the base class and the same signature.

Page 59: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include<iostream.h>

int area(int x); // square areaint area(int x,int y); //triangle areafloat area(int x,int y, int radius); //circle area

int main(){ int x=4, y=5, rad=3; cout<<"The Square area is :"<<area(x); cout<<"\nThe Triangle area is :"<<area(x,y); cout<<"\nThe Circle area is :"<<area(x,y,rad); getchar(); return 0;}

int area(int x) // square area{ return x*x; }

int area(int x,int y ) //triangle area{ return x*y; }float area(int x,int y, int radius) //circle area{ return radius*radius*3.14; }

Output:The Square area is: 16The Triangle area is :20The Circle area is: 28.26

Page 60: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream.h>class Mammal {public:void Move() const { cout << "Mammal move one step\n"; }void Move(int distance) const { cout << "Mammal move ";cout << distance <<" _steps.\n"; }protected:int itsAge;int itsWeight;};class Dog : public Mammal {public:// You may receive a warning that you are hiding a function!void Move() const { cout << "Dog move 5 steps.\n"; }}; int main() {Mammal bigAnimal;Dog fido;bigAnimal.Move();bigAnimal.Move(2);fido.Move(8);// can I do this?fido.Move();return 0;}

Output:Mammal move one stepMammal move 2 steps.Dog move 5 steps

Page 61: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

To call a function you’ve overridden in a derived class you need to use virtual functions.

Example:struct Base { virtual void do_something() = 0; }; struct Derived1 : public Base { void do_something() { cout << "I'm doing something"; } }; struct Derived2 : public Base { void do_something() { cout << "I'm doing something else"; } }; int main() { Base *pBase = new Derived1; pBase->do_something();//does something delete pBase; pBase = new Derived2; pBase->do_something();//does something else delete pBase; return 0; }

Page 62: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Output: (1)dog (2)cat (3)horse (4)pig: 1(1)dog (2)cat (3)horse (4)pig: 2(1)dog (2)cat (3)horse (4)pig: 3(1)dog (2)cat (3)horse (4)pig: 4(1)dog (2)cat (3)horse (4)pig: 5Woof!Meow!Winnie!Oink!Mammal speak!

#include<stdlib.h>#include <iostream.h> class Mammal { public: Mammal():itsAge(1) { } ~Mammal() { } virtual void Speak() const { cout << "Mammal speak!\n"; } protected: int itsAge; };

class Dog : public Mammal { public: void Speak()const { cout << "Woof!\n"; } };

class Cat : public Mammal { public: void Speak()const { cout << "Meow!\n"; } };

class Horse : public Mammal { public: void Speak()const { cout << "Winnie!\n"; } };

class Pig : public Mammal { public: void Speak()const { cout << "Oink!\n"; } };

int main() { Mammal* theArray[5]; Mammal* ptr; int choice, i; for ( i = 0; i<5; i++) { cout << "(1)dog (2)cat (3)horse (4)pig: "; cin >> choice; switch (choice) { case 1: ptr = new Dog; break; case 2: ptr = new Cat; break; case 3: ptr = new Horse; break; case 4: ptr = new Pig; break; default: ptr = new Mammal; break; } theArray[i] = ptr; } for (i=0;i<5;i++) theArray[i]->Speak(); system("pause");return 0; }

Page 63: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Only if you have to redefine a function in a Derived class that is already defined in Base Class, otherwise, it’s just extra resources when executed.

Page 64: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream>using namespace std;

class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b; } };

class CRectangle: public CPolygon { public: int area () { return (width * height); } };

class CTriangle: public CPolygon { public: int area () { return (width * height / 2); } };

int main () { CRectangle rect; CTriangle trgl; CPolygon * ppoly1 = &rect; CPolygon * ppoly2 = &trgl; ppoly1->set_values (4,5); ppoly2->set_values (4,5); cout << rect.area() << endl; cout << trgl.area() << endl; getchar(); return 0;}

Output:2010

Page 65: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Used in place of a specific data type. For example, use a template to add data types together, whichever data type the user wishes (i.e. integers, floats)

Page 66: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream>using namespace std;

template <class T>T GetMax (T a, T b) { T result; result = (a>b)? a : b; return (result);}

int main () { int i=5, j=6, k; float l=10.5, m=5.6, n; k=GetMax<int>(i,j); n=GetMax<float>(l,m); cout << k << endl; cout << n << endl; getchar(); return 0;}

Output:610.5

Page 67: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

int i;long l;k = GetMax (i,l); This would not be correct, since our GetMax function template expects two arguments of the same type.But if we did the following:template <class T, class U> T GetMin (T a, U b) { return (a<b?a:b); }Then we could call the function like this:int i,j;long l;i = GetMin<int,long> (j,l); Or simply:i = GetMin (j,l);

Page 68: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream> using namespace std; template <class T> class mypair { T a, b; public: mypair (T first, T second) { // constructora=first; b=second;} T getmax (); }; template <class T> T mypair<T>::getmax () { T retval; retval = a>b? a : b; return retval; } int main () { mypair <int> myobject (100, 75); cout << myobject.getmax(); return 0; }

Output:100

Page 69: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

mypair<int> myobject (115, 36); This same class would also be used to create an object to store any other type:mypair<double> myfloats (3.0, 2.18);

Page 70: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream>using namespace std;

// class template:template <class T>class mycontainer { T element; public: mycontainer (T arg) {element=arg;} T increase () {return ++element;}};

// class template specialization:template <>class mycontainer <char> { char element; public: mycontainer (char arg) {element=arg;} char uppercase () { if ((element>='a')&&(element<='z')) element+='A'-'a'; return element; }};

int main () { mycontainer<int> myint (7); mycontainer<char> mychar ('j'); cout << myint.increase() << endl; cout << mychar.uppercase() << endl; return 0;}

Output:8J

Page 71: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Always check for points where your program could get into undesirable action.

Programmer should be responsible for adding exception handling code to eliminate unexpected end of execution.

assert is a function that checks if an expression meets certain conditions.

Page 72: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <stdio.h>#include <assert.h>void print_number(int* myInt) { assert (myInt!=NULL); // make sure that a value had been assigned to myInt printf ("%d\n",*myInt); } int main () { int a=10; int * b = NULL; int * c = NULL; b=&a; print_number (b); print_number (c); return 0; }

Page 73: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

A way of handling Exceptions, example:#include <iostream>using namespace std; int main() { char *buf; try { buf = new char[512]; if( buf == 0 ) throw "Memory allocation failure!"; } catch( char * str ) { cout << "Exception raised: " << str << '\n'; } }

Output: Exception raised: Memory allocation failure!

Page 74: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

The catch block is only executed if an error was thrown in the try block.

catch(data type); the data type in this case inform us that this catch can catch an exception of type integer.

A catch block with ellipses(…)catches any type of exception.

Page 75: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Two classes derived from exception: Logic_error Runtime_error

Both classes are defined in the stdexcept header file.

invalid_argument class deals with illegal arguments in function calls. The class out_of_range and length_error are another examples.

Page 76: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

bad_alloc when new fail to allocate memory.

run_time_error errors occurring during excexution.

overflow_error and underflow_error deals with arithmetic overflow and underflow both derived from run_time_error class.

Page 77: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include <iostream>using namespace std;void MyFunc( void );

class CTest {public: CTest() {}; ~CTest() {}; const char *ShowReason() const { return "Exception in CTest class."; }};

class CDtorDemo {public: CDtorDemo(); ~CDtorDemo();};

CDtorDemo::CDtorDemo() { cout << "Constructing CDtorDemo.\n";}

CDtorDemo::~CDtorDemo() { cout << "Destructing CDtorDemo.\n";}

void MyFunc() { CDtorDemo D; cout<< "In MyFunc(). Throwing CTest exception.\n"; throw CTest(); }

int main() { cout << "In main.\n"; try { cout << "In try block, calling MyFunc().\n"; MyFunc(); } catch( CTest E ) { cout << "In catch handler.\n"; cout << "Caught CTest exception type: "; cout << E.ShowReason() << "\n"; } catch( char *str ) { cout << "Caught some other exception: " << str << "\n"; } cout << "Back in main. Execution resumes here.\n"; system("pause");}

Page 78: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

In main. In try block, calling MyFunc(). Constructing CDtorDemo. In MyFunc(). Throwing CTest exception. Destructing CDtorDemo. In catch handler. Caught CTest exception type: Exception in CTest class. Back in main. Execution resumes here.

Page 79: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Terminate the Program: Input files does not exist, no meaning of continue

Include code to recover from exception: User inputs wrong type, just inform user to re-enter correct format.

Log the error and continue: The program should be always running no matter what happened ( Monitoring satellites for example)

Page 80: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

By recursion we let a function call it self recursively until a break condition is met

The break condition is usually set in the base case of the problem

Example, factorial problem: 0!=1 this is the base case n! = n(n-1)! If n>0, this is the general case

Always general case should reduce o base case

Page 81: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include<iostream.h>

int main(){ int n=5; double fact=1; for(int i=1;i<=n;i++) fact=fact*i; cout<<fact; getchar();}

Page 82: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include<iostream.h>double fact(int);int main(){ int n=5; double factVar=1; factVar=fact(n); cout<<factVar; getchar();}

double fact(int f) // Since the factorial grow fast, it’s better to make it { // double if(f==0)return 1; else return fact(f-1)*f;}

Page 83: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

The Fibonacci sequence looks like this:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...Fibonacci equations are:F(1) = 1F(2) = 1F(n) = F(n – 1) + F(n – 2)

Page 84: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include<iostream.h>int fib(int); // Fibonacci function prototype

int main(){ int n=10; // The index of Fibonacci that we need to get cout<<fib(n); getchar();}

int fib(int x){ if(x==1 || x==2) return 1; else return fib(x-1)+fib(x-2);}

Page 85: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

#include<iostream.h>void hannoiTower(int,int,int,int);static int counter=0;

int main(){ int disk=17; long beginTime = time(NULL); // Record starting time hannoiTower(disk,1,3,2); long endTime = time(NULL);// Record Ending time cout<<“”\n Time CPU spent in calculating:”<<endTime-beginTime; cout<<"\nNumber of disk moves were :"<<counter; getchar(); return 0;}

Page 86: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

void hannoiTower(int count,int needle1,int needle3,int needle2){ if(count>0) { hannoiTower(count-1,1,2,3); cout<<"Move disk "<<count<<" from "<<needle1 <<" to "<<needle3<<"."<<endl; hannoiTower(count-1,2,3,1); counter++; // To calculate total number of disk moves

} //which should be =2Number of Disks -1 }

Page 87: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Recursion functions executes more slowly that iteration version, and uses more memory and CPU time.

Choosing one method over another depends on the nature of the problem

Iterative method is easier than recursion, so unless the problem is inherently recursive, try to avoid recursion.

Page 88: How a computer stores data in its internal memory  RAM (Random-Access Memory) - temporary  ROM (Read-Only Memory) – non volatile  Store data in bytes

Questions??Good Luck from REACH in your Test