data_type array_name [number-of-elements]; two dimensional array array_type array_name...

68

Upload: amberly-dalton

Post on 12-Jan-2016

245 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 2: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

data_type array_name [number-of-elements];

Two Dimensional Arrayarray_type array_name [number_of_ROWS]

[number_of_COLUMNS];

Page 3: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

type* pointer_name;

ex. int my_int;int* my_int_pointer =

&my_int;

Assigns the address of my_int to the pointer

Page 4: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 5: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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)

Page 6: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 7: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 8: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 9: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 10: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

class ClassName{

memberList};

memberList can be either data member declarations or method declarations

Page 11: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Class Bow{

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

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

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

};

Page 12: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Return_type ClassName::methodName(argumentList)

{methodImplementation

}

Page 13: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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

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

}

Page 14: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 15: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 16: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 17: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 18: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 19: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 21: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Function declarationFunction definitionFunction call

Page 23: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 24: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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

Page 25: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 26: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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

#include <cstdio>

Main(){ FILE *pRead;

pRead = fopen(“c:\\folder1\\folder2\\file1.dat”, “r”);

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

}

Page 27: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 28: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 29: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Pretty basic. Always close files when you use fopen.

Page 30: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 31: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 32: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 33: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 34: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 35: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 36: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 37: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

/* exit example */ #include <stdio.h>#include <stdlib.h>int main () {

FILE * pFile; pFile = fopen ("myfile.txt","r"); if (pFile==NULL) {

printf ("Error opening file"); exit (EXIT_FAILURE);

} else {

/* file operations here */ }

return 0; }

Page 38: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

/* perror example */ #include <stdio.h> int main () { FILE * pFile; pFile=fopen ("unexist.ent","rb"); if (pFile==NULL)

perror ("The following error occurred"); else

fclose (pFile); return 0; }

Page 39: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

void swap (int *a, int *b) ;void swap (float *c, float *d) ;void swap (char *p, char *q) ;The other way is to have different

number of input parameters for the function

Page 40: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

int boxVolume(int length = 1, int width = 1,int height = 1) {return (length * width * height);}

If the function was called with no parameters then the default values will be used.

Page 41: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Used to go out one level. If you have a global and local

variables with same name, and need to call global from local scope then you need to use

::VariableName

Page 42: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

All your declared variables are automatic.

Static variables keep there values as long as they exist.

Page 43: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 44: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 45: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

class ClassName{

memberList};

memberList can be either data member declarations or method declarations

Page 46: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Class Bow{

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

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

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

};

Page 47: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Return_type ClassName::methodName(argumentList)

{methodImplementation

}

Page 48: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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

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

}

Page 49: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 50: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

An inline function is one in which the function code replaces the function call directly.

#include <stdio.h>inline void test(void){ puts("Hello!");}

int main (){ test(); // This will be replaced with puts("Hello!") on run

time return 0;}

Page 51: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Friend declarations introduce extra coupling between classes

Once an object is declared as a friend, it has access to all non-public members as if they were public

A friend function of a class is defined outside of that class's scope

Page 52: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

// friend functions #include <iostream> using namespace std; class CRectangle {

int width, height; public: void set_values (int, int);

int area () {return (width * height);} friend CRectangle duplicate (CRectangle);

}; void CRectangle::set_values (int a, int b) { width = a; height = b; } CRectangle duplicate (CRectangle rectparam) {

CRectangle rectres; rectres.width = rectparam.width*2; rectres.height = rectparam.height*2; return (rectres);

} int main () {

CRectangle rect, rectb; rect.set_values (2,3); rectb = duplicate (rect); cout << rectb.area(); return 0;

}

Output:24

Page 53: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

To call a namespace combat::fire()

Say (to avoid having to put combat:: every time

using namespace combat;

fire()

Page 54: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

class aClass // Base class{

public:int anInt;

}

class aDerivedClass : public aClass //Derived class

{protected:

float aFloat;};

Page 55: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

class aClass // Base class{

public:int anInt;

}

class aDerivedClass : public aClass //Derived class

{protected:

float aFloat;};

Page 56: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 57: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 58: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];
Page 59: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 60: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 61: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 62: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 63: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 64: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 65: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 66: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

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 67: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

#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 68: data_type array_name [number-of-elements];  Two Dimensional Array array_type array_name [number_of_ROWS][number_of_COLUMNS];

Questions??Good Luck from REACH in your Test