50
1 SEN 909 OO Programming in C++ SEN 909 OO Programming in C++ Final Exam Final Exam Multiple choice, True/False and some minimal programming will be required

Topics Covered

Embed Size (px)

DESCRIPTION

SEN 909 OO Programming in C++ Final Exam Multiple choice, True/False and some minimal programming will be required. Topics Covered. C++ basic programming concepts Struct and Union Concepts C++ Classes Inheritance Object-Oriented Programming Pointers You will have to write a class - PowerPoint PPT Presentation

Citation preview

Page 1: Topics Covered

1

SEN 909 OO Programming in C++SEN 909 OO Programming in C++Final ExamFinal Exam

Multiple choice, True/False and some minimal programming will be required

Page 2: Topics Covered

2

Topics CoveredTopics Covered

• C++ basic programming concepts• Struct and Union Concepts• C++ Classes• Inheritance• Object-Oriented Programming• Pointers• You will have to write a class• You will have to write a struct

Page 3: Topics Covered

3

Structured Data Type Structured Data Type

Definition: A structured data type is a type in which each value is a collection of component items. The entire collection has a single name each component can be accessed individually

Know what is meant by a structured data type. You do not need to create a struct or use one on the final exam.

Page 4: Topics Covered

4

Accessing struct Members

Dot ( period ) is the member selection operator.

After the struct type declaration, the various members can be used in your program only when they are preceded by a struct variable name and a dot.

EXAMPLESthisAnimal.weightanotherAnimal.country

Page 5: Topics Covered

5

Abstraction Abstraction

Abstraction is the separation of the essential qualities of an object from the details of how it works or is composed

It focuses on what, not how

It is necessary for managing large, complex software projects

Page 6: Topics Covered

6

Abstract Data Type (ADT)Abstract Data Type (ADT)

Is a programmer-defined type with a set of

values and allowable operations for the type.

Some ways to define a new C++ type are:

using struct

using class

Page 7: Topics Covered

7

ADT Implementation means ADT Implementation means

Choosing a specific data representation for the abstract data using data types that already exist (built-in or programmer-defined) Called “Data Members”

Writing functions (member functions) for each allowable operation

Page 8: Topics Covered

8

Information HidingInformation Hiding

Class implementation details are hidden from the client’s view. This is called information hiding.

Public functions of a class provide the interface between the client code and the class objects.

clientcode

specification implementation

abstraction barrier

Page 9: Topics Covered

9

Benefits of information hidingBenefits of information hiding

Data and details can be concealed from the client of the abstraction.

Code can be changed without affecting the client because the specification and interface are unchanged.

Page 10: Topics Covered

10

class TimeTypeclass TimeType Specification Specification

// Specification File ( timetype.h )

class TimeType // declares a class data type{ // does not allocate

memory

public : // 5 public function members

void Set ( int hours , int mins , int secs ) ;void Increment ( ) ;void Write ( ) const ;bool Equal ( TimeType otherTime ) const ; bool LessThan ( TimeType otherTime ) const ;

private : // 3 private data members

int hrs ; int mins ; int secs ;

} ;

Page 11: Topics Covered

11

Use of C++ data TypeUse of C++ data Type class class

Facilitates re-use of C++ code for an ADT

Software that uses the class is called a client

Variables of the class type are called class objects or class instances

Client code uses public member functions to handle its class objects

Page 12: Topics Covered

12

Using Using classclass

A class is a programmer-defined type whose components (called class members) can be variables or functions.

Class members are private by default. Compiler does not permit client code to access private class members.

Class members declared public form the interface between the client and the class.

In most classes, the private members contain data, and the public members are functions to manipulate that data.

Page 13: Topics Covered

13

Member functions categorized by taskMember functions categorized by task

CONSTRUCTOR -- a member function that actually creates a new instance and initialized some or all of its data members

ACCESS FUNCTION or OBSERVER -- a member function that can inspect (use but not modify) the data members of a class without changing their values. Such a function is declared with const following the parameter list in both the specification and the implementation files.

Page 14: Topics Covered

14

Client Code UsingClient Code Using TimeTypeTimeType

#include “timetype.h” // includes specification of the classusing namespace std ;

int main ( ){

TimeType currentTime ; // declares 2 objects of TimeType TimeType endTime ; bool done = false ;

currentTime.Set ( 5, 30, 0 ) ; endTime.Set ( 18, 30, 0 ) ; while ( ! done )

{ . . .

currentTime.Increment ( ) ;if ( currentTime.Equal ( endTime ) )

done = true ; } ;}

14

Page 15: Topics Covered

15

classclass type Declaration type Declaration

The class declaration creates a data type and names the members of the class.

It does not allocate memory for any variables of that type!

Client code still needs to declare class variables.

Page 16: Topics Covered

16

C++ Data Type C++ Data Type classclass represents an ADT represents an ADT

2 kinds of class members: data members and function members

Class members are private by default

Data members are generally private

Function members are generally declared public

Private class members can be accessed only by the class member functions (and friend functions), not by client code.

Page 17: Topics Covered

17

AggregateAggregate class class Operations Operations

Built-in operations valid on class objects are:

Member selection using dot ( . ) operator ,

Assignment to another class variable using ( = ),

Pass to a function as argument

(by value or by reference),

Return as value of a function

Other operations can be defined as class member functions

Page 18: Topics Covered

18

2 separate files Generally Used for2 separate files Generally Used for classclass Type Type

// Specification File ( timetype .h ) // Specifies the data and function members. class TimeType { public: . . .

private: . . . } ;

// Implementation File ( timetype.cpp ) // Implements the TimeType member functions. . . .

Page 19: Topics Covered

19

Implementation File for Implementation File for TimeTypeTimeType

// Implementation File ( timetype.cpp ) // Implements the TimeType member functions.

#include “ timetype.h” // also must appear in client code #include <iostream>

. . .

bool TimeType :: Equal (TimeType otherTime ) const // Function value == true, if this time equals otherTime // == false , otherwise { return ( (hrs == otherTime.hrs) && (mins == otherTime.mins) && (secs == otherTime.secs)

) ; }

. . .

Page 20: Topics Covered

20

Scope Resolution Operator ( :: ) Scope Resolution Operator ( :: )

C++ programs typically use several class types

Different classes can have member functions with the same identifier, like Write( )

Member selection operator is used to determine the class whose member function Write( ) is invoked

currentTime .Write( ) ; // class TimeTypenumberZ .Write( ) ; // class ComplexNumberType

In the implementation file, the scope resolution operator is used in the heading before the function member’s name to specify its class

void TimeType :: Write ( ) const{ . . .

}

Page 21: Topics Covered

21

Class Constructors Class Constructors

A class constructor is a member function whose purpose is to initialize the private data members of a class object

The name of a constructor is always the name of the class, and there is no return type for the constructor

A class may have several constructors with different parameter lists. A constructor with no parameters is the default constructor

A constructor is implicitly invoked when a class object is declared--if there are parameters, their values are listed in parentheses in the declaration

Page 22: Topics Covered

22

Specification of Specification of TimeType TimeType Class Class Constructors Constructors

class TimeType // timetype.h{public : // 7 function members

void Set ( int hours , int minutes , int seconds ) ;void Increment ( ) ;void Write ( ) const ;bool Equal ( TimeType otherTime ) const ; bool LessThan ( TimeType otherTime ) const ;

TimeType ( int initHrs , int initMins , int initSecs ) ; // constructor

TimeType ( ) ; // default constructor

private : // 3 data membersint hrs ; int mins ; int secs ;

} ; 22

Page 23: Topics Covered

23

Implementation of Implementation of TimeTypeTimeType Default Default Constructor Constructor

TimeType :: TimeType ( )// Default Constructor// Postcondition: // hrs == 0 && mins == 0 && secs == 0{

hrs = 0 ; mins = 0 ; secs = 0 ;}

Page 24: Topics Covered

24

Implementation of Another Implementation of Another TimeTypeTimeType Class Constructor Class Constructor

TimeType :: TimeType ( int initHrs, int initMins, int initSecs )

// Constructor

// Precondition: 0 <= initHrs <= 23 && 0 <= initMins <= 59

// 0 <= initSecs <= 59

// Postcondition:

// hrs == initHrs && mins == initMins && secs == initSecs

{

hrs = initHrs ;

mins = initMins ;

secs = initSecs ;

}

Page 25: Topics Covered

25

For the Final ExamFor the Final Exam

Note: You will be asked to write a simple class, without using dynamic memory. (no Copy Constructor or Destructor writing will be required.)

You should know what a copy constructor and a destructor is in concept.

Page 26: Topics Covered

26

PointersPointers

• A pointer holds the memory address of another object.• Through the pointer we can indirectly manipulate the

referenced object.

Pointers are useful for

• Creating linked data structures such as linked lists,• management of dynamically allocated objects, and• as a function parameter type for passing large objects

such as arrays.

Page 27: Topics Covered

Pass-by-valuePass-by-value

CALLINGBLOCK

FUNCTION CALLED

sends a copy of the contents of the actual parameter

SO, the actual parameter cannot be changed by the function.

27

Page 28: Topics Covered

Pass-by-referencePass-by-reference

sends the location (memory address)of the actual parameter

can change value ofactual parameter

CALLINGBLOCK FUNCTION

CALLED

28

Page 29: Topics Covered

29

Obtaining Memory AddressesObtaining Memory Addresses

the address of a non-array variable can be obtained by using the address-of operator &

int x;float number;char ch;

cout << “Address of x is “ << &x << endl;

cout << “Address of number is “ << &number << endl;

cout << “Address of ch is “ << &ch << endl;

Page 30: Topics Covered

30

What is a pointer variable?What is a pointer variable?

A pointer variable is a variable whose value is the address of a location in memory.

to declare a pointer variable, you must specify the type of value that the pointer will point to, for example,

int* ptr; // ptr will hold the address of an int

char* q; // q will hold the address of a char

Page 31: Topics Covered

31

Using a Pointer VariableUsing a Pointer Variable

int x;

x = 12;

int* ptr;

ptr = &x;

NOTE: Because ptr holds the address of x,

we say that ptr “points to” x

2000

12

x

3000

2000

ptr

Page 32: Topics Covered

32

2000

12

x

3000

2000

ptr

int x; x = 12;

int* ptr; ptr = &x;

cout << *ptr;

NOTE: The value pointed to by ptr is denoted by *ptr

Unary operator Unary operator ** is the indirection is the indirection (deference) operator(deference) operator

Page 33: Topics Covered

33

int x; x = 12;

int* ptr; ptr = &x;

*ptr = 5; // changes the value // at address ptr to 5

Using the Dereference OperatorUsing the Dereference Operator

2000

12 5

x

3000

2000

ptr

Page 34: Topics Covered

34

char ch; ch = ‘A’;

char* q; q = &ch;

*q = ‘Z’; char* p; p = q; // now p and q both point to ch

Another ExampleAnother Example

4000

A Z

ch

5000 6000

4000 4000

q p

Page 35: Topics Covered

Operator Operator newnew Syntax Syntax

new DataType

new DataType [IntExpression]

If memory is available, in an area called the heap (or free store) new allocates the requested object or array, and returns a pointer to (address of ) the memory allocated.

Otherwise, program terminates with error message.

The dynamically allocated object exists until the delete operator destroys it. 35

Page 36: Topics Covered

36

3 Kinds of Program Data3 Kinds of Program Data

STATIC DATA: memory allocation exists throughout execution of program

AUTOMATIC DATA: automatically created at function entry, resides in activation frame of the function, and is destroyed when returning from function

DYNAMIC DATA: explicitly allocated and deallocated during program execution by C++ instructions written by programmer using operators new and delete

Page 37: Topics Covered

37

Dynamically Allocated DataDynamically Allocated Data

char* ptr;

ptr = new char;

*ptr = ‘B’;

cout << *ptr;

NOTE: Dynamic data has no variable name

2000

ptr

‘B’

Page 38: Topics Covered

38

Dynamically Allocated DataDynamically Allocated Data

char* ptr;

ptr = new char;

*ptr = ‘B’;

cout << *ptr;

delete ptr;

2000

ptr

NOTE: delete de-allocates the memory pointed to by ptr

?

Page 39: Topics Covered

Operator delete returns to the free store memory which was previously allocated at run-time by operator new.

The object or array currently pointed to by the pointer is deallocated, and the pointer is considered unassigned.

Using Operator Using Operator deletedelete

39

Page 40: Topics Covered

Operator Operator deletedelete Syntax Syntax

delete Pointer

delete [ ] Pointer

If the value of the pointer is 0 there is no effect.

Otherwise, the object or array currently pointed to by Pointer is deallocated, and the value of Pointer is undefined. The memory is returned to the free store.

Square brackets are used with delete to deallocate a dynamically allocated array. 40

Page 41: Topics Covered

41

Dynamic Array Deallocation Dynamic Array Deallocation

char *ptr ;

ptr = new char[ 5 ];

strcpy( ptr, “Bye” );

ptr[ 1 ] = ‘u’;

delete ptr; // deallocates array pointed to by ptr // ptr itself is not deallocated // the value of ptr is undefined.

ptr

?

Page 42: Topics Covered

42

int* ptr = new int; *ptr = 3;

ptr = new int; // changes value of ptr *ptr = 4;

What happens here?What happens here?

3

ptr

3

ptr

4

Page 43: Topics Covered

43

Inaccessible ObjectInaccessible Object

An inaccessible object is an unnamed object that was created by operator new and which a programmer has left without a pointer to it.

int* ptr = new int;

*ptr = 8;

int* ptr2 = new int;

*ptr2 = -5;

8

ptr

-5

ptr2

Page 44: Topics Covered

44

Making an Object InaccessibleMaking an Object Inaccessible

int* ptr = new int;

*ptr = 8;

int* ptr2 = new int;

*ptr2 = -5;

ptr = ptr2; // here the 8 becomes inaccessible

8

ptr

-5

ptr2

8

ptr

-5

ptr2

Page 45: Topics Covered

45

Memory LeakMemory Leak

A memory leak is the loss of available memory space that occurs when dynamic data is allocated but never deallocated.

Page 46: Topics Covered

46

int* ptr = new int;

*ptr = 8;

int* ptr2 = new int;

*ptr2 = -5;

ptr = ptr2;

delete ptr2; // ptr is left dangling

ptr2 = NULL;

Leaving a Dangling PointerA pointer that points to dynamic memory that has been de-allocated

8

ptr

-5

ptr2

8

ptr

NULL

ptr2

Page 47: Topics Covered

47

Why is a destructor needed?Why is a destructor needed?

When a DynArray class variable goes out of scope, the memory space for data members size and pointer arr is deallocated.

But the dynamic array that arr points to is not automatically deallocated.

A class destructor is used to deallocate the dynamic memory pointed to by the data member.

Page 48: Topics Covered

48

DynArray::~DynArray( );

// Destructor.

// POST: Memory for dynamic array deallocated.

{

delete [ ] arr ;

}

48

class DynArray Destructorclass DynArray Destructor

Page 49: Topics Covered

49

For the Final ExamFor the Final Exam

Note: You will not have to write source code using pointers or dynamic memory. Questions related to these topics will be multiple choice or True/False

Page 50: Topics Covered

50

SEN 909 OO Programming in C++SEN 909 OO Programming in C++Final ExamFinal Exam

Multiple choice, True/False and some minimal programming will be required