1 Final Exam 20 Questions Final Exam 20 Questions Multiple choice and some minimal programming will be required.

Slides:



Advertisements
Similar presentations
1 Classes and Data Abstraction Chapter What a Class ! ! Specification and implementation Private and public elements Declaring classes data and.
Advertisements

1 Chapter Structured Types, Data Abstraction and Classes Dale/Weems.
Informática II Prof. Dr. Gustavo Patiño MJ
1 Pointers A pointer variable holds an address We may add or subtract an integer to get a different address. Adding an integer k to a pointer p with base.
1 Chapter 4 Stack and Queue ADT. 2 Stacks of Coins and Bills.
1 Lecture 24 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington.
1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington.
Pointers. Addresses in Memory When a variable is declared, enough memory to hold a value of that type is allocated for it at an unused memory location.
1 Lecture 29 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington.
1 Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation –The new operator –The delete operator –Dynamic.
1 Abstract Data Type (ADT) a data type whose properties (domain and operations) are specified (what) independently of any particular implementation (how)
1 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.
1 Procedural Concept The main program coordinates calls to procedures and hands over appropriate data as parameters.
Review of C++ Programming Part II Sheng-Fang Huang.
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
 2006 Pearson Education, Inc. All rights reserved Classes: A Deeper Look.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes.
1 Structured Types, Data Abstraction and Classes.
Pointer Data Type and Pointer Variables
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes.
1 Chapter 9 Scope, Lifetime, and More on Functions.
1 C++ Plus Data Structures Nell Dale Chapter 4 ADTs Stack and Queue Slides by Sylvia Sorkin, Community College of Baltimore County - Essex Campus.
1 Lecture 14 Chapter 18 - Recursion. 2 Chapter 18 Topics l Meaning of Recursion l Base Case and General Case in Recursive Function Definitions l Writing.
1 Chapter 13 Recursion. 2 Chapter 13 Topics l Meaning of Recursion l Base Case and General Case in Recursive Function Definitions l Writing Recursive.
Recursion Textbook chapter Recursive Function Call a recursive call is a function call in which the called function is the same as the one making.
Addresses in Memory When a variable is declared, enough memory to hold a value of that type is allocated for it at an unused memory location. This is.
 2006 Pearson Education, Inc. All rights reserved Classes: A Deeper Look, Part 2.
SEN 909 OO Programming in C++ Final Exam Multiple choice, True/False and some minimal programming will be required.
1 C++ Plus Data Structures Nell Dale Chapter 4 ADTs Stack and Queue Modified from the slides by Sylvia Sorkin, Community College of Baltimore County -
1 Chapter Structured Types, Data Abstraction and Classes Dale/Weems.
1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington.
1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems.
1 Chapter 11 Structured Types, Data Abstraction and Classes Dale/Weems/Headington.
C++ Data Types Structured array struct union class Address pointer reference Simple IntegralFloating char short int long enum float double long double.
C++ Programming: From Problem Analysis to Program Design, Second Edition Chapter 13: Pointers You are not responsible for virtual functions (starting on.
1 Chapter 15-2 Pointers, Dynamic Data, and Reference Types Dale/Weems.
Dynamic Memory Allocation. Domain A subset of the total domain name space. A domain represents a level of the hierarchy in the Domain Name Space, and.
1 Data Structures and Algorithms Week 3 Data Abstraction: Part II Structured Types, and Classes.
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes.
Copyright 2005, The Ohio State University 1 Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation.
Structures (aka records, structs) Textbook Chapter 11 sections:
1 Structural Types, Data Abstractions and Classes.
Chapter 10: Classes and Data Abstraction. Objectives In this chapter, you will: Learn about classes Learn about private, protected, and public members.
1 Final Exam Tues 3/16/10 (2-3:50) (Same classroom) Old Textbook - Chapters 11-16, 18 Focus is on 15, 16 and 18 Final Exam Tues 3/16/10 (2-3:50) (Same.
1 Recursion. 2 Chapter 15 Topics  Meaning of Recursion  Base Case and General Case in Recursive Function Definitions  Writing Recursive Functions with.
1 Classes II Chapter 7 2 Introduction Continued study of –classes –data abstraction Prepare for operator overloading in next chapter Work with strings.
1 Chapter 9 Scope, Lifetime, and More on Functions.
Chapter 10: Classes and Data Abstraction. Classes Object-oriented design (OOD): a problem solving methodology Objects: components of a solution Class:
1 Recall that... char str [ 8 ]; str is the base address of the array. We say str is a pointer because its value is an address. It is a pointer constant.
1 Chapter 15-1 Pointers, Dynamic Data, and Reference Types Dale/Weems.
1 // SPECIFICATION FILE (dynarray.h) // Safe integer array class allows run-time specification // of size, prevents indexes from going out of bounds, //
Dynamic Memory Management & Static Class Members Lecture No 7 Object Oriented Programming COMSATS Institute of Information Technology.
Chapter 12: Pointers, Classes, Virtual Functions, Abstract Classes, and Lists.
1 Classes and Data Abstraction Chapter What a Class ! ! Specification and implementation Private and public elements Declaring classes data and.
1 Chapter 10 & 11 enum & Structured Types Dale/Weems.
1 Chapter 12 Classes and Abstraction. 2 Chapter 12 Topics Meaning of an Abstract Data Type Declaring and Using a class Data Type Using Separate Specification.
1 Structured Types, Data Abstraction and Classes.
Chapter 14 Dynamic Data and Linked Lists
Chapter 12 Classes and Abstraction
Dale/Weems/Headington
Chapter Structured Types, Data Abstraction and Classes
Chapter 10: Pointers Starting Out with C++ Early Objects Ninth Edition
Introduction to Structured Data Types and Classes
Chapter 15 Pointers, Dynamic Data, and Reference Types
Classes and Data Abstraction
Pointers, Dynamic Data, and Reference Types
Chapter 15 Pointers, Dynamic Data, and Reference Types
9-10 Classes: A Deeper Look.
Pointers, Dynamic Data, and Reference Types
9-10 Classes: A Deeper Look.
Presentation transcript:

1 Final Exam 20 Questions Final Exam 20 Questions Multiple choice and some minimal programming will be required

2 Topics Covered Implementing Arrays and Structs List Structures (Arrays & Linked List) C++ Classes Object-Oriented Programming Pointers Dynamic Memory Recursion

3 The Basic Array Structure Declare an array called temps which will hold up to 5 individual float values. float temps[5]; // declaration allocates memory temps[0] temps[1] temps[2] temps[3] temps[4] number of elements in the array indexes or subscripts Base Address

4 Declaration of an Array The index is also called the subscript In C++, the first array element always has subscript 0. The second array element has subscript 1, etc. The base address of an array is its beginning address in memory DataType ArrayName [ConstIntExpression];

5 Assigning Values to Individual Array Elements float temps[ 5 ] ; // allocates memory for array int m = 4 ; temps[ 2 ] = 98.6 ; temps[ 3 ] = ; temps[ 0 ] = 99.4 ; temps[ m ] = temps[ 3 ] / 2.0 ; temps[ 1 ] = temps[ 3 ] ; // what value is assigned? temps[0] temps[1] temps[2] temps[3] temps[4] ?

6 What values are assigned? float temps[ 5 ] ; int m ; for (m = 0; m < 5; m++) { temps[ m ] = m  0.2 ; } temps[0] temps[1] temps[2] temps[3] temps[4] ? ? ? ? ?

7 Now what values are printed? float temps[ 5 ] ; int m ;..... for (m = 4; m >= 0; m-- ) { cout << temps[ m ] << endl ; } temps[0] temps[1] temps[2] temps[3] temps[4]

8 Variable Subscripts float temps[ 5 ] ; int m = 3 ; What is temps[ m + 1] ? What is temps[ m ] + 1 ? temps[0] temps[1] temps[2] temps[3] temps[4]

9 Initializing in a Declaration int ages[ 5 ] = { 40, 13, 20, 19, 36 } ; for ( int m = 0; m < 5; m++ ) { cout << ages[ m ] ; } ages[0] ages[1] ages[2] ages[3] ages[4]

10 For the Final Exam Note: You might be asked to write a simple array structure.

11 Array-Based List

12 Linked List ADT

13 Array List vs. Linked List ADT Array List Pre-allocation Required Waste-full if you allocate too much Fatal if you allocate too little Data has to be shifted when an item is inserted or deleted at specified position Linked List Truly dynamic, memory is allocated as needed No shifting when an item is inserted, deleted

14 For the Final Exam Note: You will NOT be asked to write a Linked List Questions related to Link List are concept based, (no code writing).

15 Structured Data Type 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

16 thisAnimal.id name “giant panda”.genus “Ailuropoda”.species “melanoluka”.country “China”.age 18.weight health Good

17 struct AnimalType enum HealthType { Poor, Fair, Good, Excellent } ; struct AnimalType// declares a struct data type {// does not allocate memory long id ; string name ; string genus ; string species ; struct members string country ; int age ; float weight ; HealthType health ; } ; AnimalType thisAnimal ; // declare variables of AnimalType AnimalType anotherAnimal ; 17

18 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. EXAMPLES thisAnimal.weight anotherAnimal.country

19 For the Final Exam Note: You might be ask to write a simple struct.

20 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

21 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 typedef using struct using class

22 ADT Specification Example TYPE TimeType DOMAIN Each TimeType value is a time in hours, minutes, and seconds. OPERATIONS Set the time Print the time Increment by one second Compare 2 times for equality Determine if one time is “less than” another

23 ADT Implementation means Choosing a specific data representation for the abstract data using data types that already exist (built-in or programmer-defined) Writing functions for each allowable operation

24 Information 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. client code specificationimplementation abstraction barrier

25 Benefits 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.

26 class TimeType 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 ; } ;

27 Use of C++ data Type 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

28 Using class 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.

29 Member 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.

30 Client Code Using TimeType #include “timetype.h” // includes specification of the class using 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 ; } ; } 30

31 class 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.

32 C++ Data Type class 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.

33 Aggregate class 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

34 2 separate files Generally Used for class Type // Specification File ( timetype.h ) // Specifies the data and function members. class TimeType { public:... private:... } ; // Implementation File ( timetype.cpp ) // Implements the TimeType member functions....

35 Implementation File for TimeType // Implementation File ( timetype.cpp ) // Implements the TimeType member functions. #include “ timetype.h” // also must appear in client code #include... 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) ) ; }...

36 Member selection operator. When a client uses a public member function, the function call requires a dot preceded by the name of the object. You can think of the function call as being sent to this object. ofstream outFile ; outFile.open (“a:\\my.out”) ;. outFile.close( ) ; class type variable, object, instance

37 Familiar Class Instances and Function Members The member selection operator (. ) selects either data members or function members Header files iostream and fstream declare the istream, ostream,and ifstream, ofstream I/O classes Both cin and cout are class objects and get and ignore are function members cin.get (someChar) ; cin.ignore (100, ‘\n’) ; The statements below, declare myInfile as an instance of class ifstream and invoke function member open ifstream myInfile ; myInfile.open ( “A:\\mydata.dat” ) ;

38 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 TimeType numberZ.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 {... }

39 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

40 Specification of TimeType Class 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 members int hrs ; int mins ; int secs ; } ; 40

41 Implementation of TimeType Default Constructor TimeType :: TimeType ( ) // Default Constructor // Postcondition: //hrs == 0 && mins == 0 && secs == 0 { hrs = 0 ; mins = 0 ; secs = 0 ; }

42 Implementation of Another TimeType 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 ; }

43 Separate Compilation and Linking of Files timetype.h client.cpptimetype.cpp client.obj client.exetimetype.obj Compiler Linker #include “timetype.h” implementation file specification file main program

44 For the Final Exam Note: You might be asked to write a simple class, without using dynamic memory. (no Copy Constructor or Destructor required.

45 Pointers 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.

Pass-by-value CALLING BLOCK FUNCTION CALLED sends a copy of the contents of the actual parameter SO, the actual parameter cannot be changed by the function. 46

Pass-by-reference sends the location (memory address) of the actual parameter can change value of actual parameter CALLING BLOCK FUNCTION CALLED 47

48 Obtaining 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;

49 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

50 Using 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 x ptr

x ptr int x; x = 12; int* ptr; ptr = &x; cout << *ptr; NOTE: The value pointed to by ptr is denoted by *ptr Unary operator * is the indirection (deference) operator

52 int x; x = 12; int* ptr; ptr = &x; *ptr = 5; // changes the value // at address ptr to 5 Using the Dereference Operator x ptr

53 char ch; ch = ‘A’; char* q; q = &ch; *q = ‘Z’; char* p; p = q; // now p and q both point to ch Another Example 4000 A Z ch q p

Operator new 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. 54

55 3 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

56 Dynamically Allocated Data char* ptr; ptr = new char; *ptr = ‘B’; cout << *ptr; NOTE: Dynamic data has no variable name 2000 ptr ‘B’

57 Dynamically 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 ?

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 delete 58

Operator delete 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. 59

60 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 ?

61 int* ptr = new int; *ptr = 3; ptr = new int; // changes value of ptr *ptr = 4; What happens here? 3 ptr 3 ptr 4

62 Inaccessible 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

63 Making 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

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

65 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 Pointer A pointer that points to dynamic memory that has been de-allocated 8 ptr -5 ptr2 8 ptr NULL ptr2

66 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.

67 DynArray::~DynArray( ); // Destructor. // POST: Memory for dynamic array deallocated. { delete [ ] arr ; } 67 class DynArray Destructor

68 Shallow Copy vs. Deep Copy a shallow copy copies only the class data members, and does not make a copy of any pointed-to data a deep copy copies not only the class data members, but also makes a separate stored copy of any pointed-to data

69 Initialization of Class Objects C++ defines initialization to mean initialization in a variable declaration passing an object argument by value returning an object as the return value of a function by default, C++ uses shallow copies for these initializations

70 As a result... when a class has a data member pointer to dynamically allocated data, you should write what is called a copy constructor the copy constructor is implicitly called in initialization situations and makes a deep copy of the dynamic data in a different memory location

71 Copy Constructors When there is a copy constructor provided for a class, the copy constructor is used to make copies for pass by value You do not call the copy constructor Like other constructors, it has no return type Because the copy constructor properly defines pass by value for your class, it must use pass by reference in its definition

72 Copy Constructor Copy constructor is a special member function of a class that is implicitly called in these 3 situations: passing object parameters by value initializing an object variable in its declaration returning an object as the return value of a function

73 CONSTRUCTOR COPY CONSTRUCTOR DESTRUCTOR Classes with Data Member Pointers Need

74 For 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.

75 Recursive Function Call A recursive call is a function call in which the called function is the same as the one making the call In other words, recursion occurs when a function calls itself! But we need to avoid making an infinite sequence of function calls (infinite recursion)

76 void message() { cout << “This is a recursive function. \n”; message(); } Recursive Function Example

77 The previous program will eventually crash, because each time a function is called, temporary information is stored on a stack. The stack memory will eventually overflow and cause an error). A recursive function (as with a loop) must have some algorithm to control the number of times it repeats. void message(int times) { if(times > 0) { cout << “This is a recursive function. \n”; message(times-1); } return; } Recursive Function Example

78 Finding a Recursive Solution The idea is for each successive recursive call to bring you one step closer to a situation in which the problem can easily be solved This easily solved situation is called the base case Each recursive algorithm must have at least one base case, as well as a general (recursive) case

79 General format for Many Recursive Functions if (some easily-solved condition) // base case solution statement else // general case recursive function call

80 Example Recursive Function Finding the Sum of the Numbers from 1 to n int Summation ( int n ) { if ( n == 1) // base case return 1 ; else // general case return ( n + Summation ( n - 1 ) ) ; }

81 “Why use recursion?” The previous example could have been written without recursion, by using iteration instead. The iterative solution uses a loop, while the recursive solution uses an if statement. However, for certain problems the recursive solution is the most natural solution. This often occurs when structured variables are used.

82 For the Final Exam Note: You will not have to write source code using recursion. Questions related to this topics will be multiple choice.

83 End of Review 20 Questions 20 Questions Multiple choice and some minimal programming will be required