Xiaoyan Li, 2007 1 CSC211 Data Structures Lectures 6/7 Pointers and Dynamic Arrays Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke.

Slides:



Advertisements
Similar presentations
CSC211 Data Structures Lecture 9 Linked Lists Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke College.
Advertisements

Chapter 17 vector and Free Store John Keyser’s Modifications of Slides By Bjarne Stroustrup
1 CSC211 Data Structures Lectures 4 & 5 Container Classes Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke College.
Linked Lists Compiled by Dr. Mohammad Alhawarat CHAPTER 04.
@ Zhigang Zhu, CSC212 Data Structure - Section RS Lectures 6/7 Pointers and Dynamic Arrays Instructor: Zhigang Zhu Department of Computer Science.
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.
Reviews for Exam 1 Chapter 1-4 CSc 212 Data Structures, Sec FG CCNY, Fall 2010.
@ Zhigang Zhu, CSC212 Data Structure - Section FG Lecture 8 Dynamic Classes and the Law of the Big Three Instructor: Zhigang Zhu Department.
1 CSC212 Data Structure - Section FG Lectures 4 & 5 Container Classes Instructor: Zhigang Zhu Department of Computer Science City College of New York.
Reviews for Exam 1 Chapter 1-4 CS 211 Data Structures MHC, 2007.
@ Zhigang Zhu, CSC212 Data Structure - Section FG Lecture 10 The Bag and Sequence Classes with Linked Lists Instructor: Zhigang Zhu Department.
Pointers1 Pointers & Dynamic Arrays Allocating memory at run-time.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 9 Pointers and Dynamic Arrays.
1 ES 314 Advanced Programming Lec 3 Sept 8 Goals: complete discussion of pointers discuss 1-d array examples Selection sorting Insertion sorting 2-d arrays.
1 Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation –The new operator –The delete operator –Dynamic.
1 Procedural Concept The main program coordinates calls to procedures and hands over appropriate data as parameters.
1 CISC181 Introduction to Computer Science Dr. McCoy Lecture 19 Clicker Questions November 3, 2009.
Review for Midterm Chapter 1-9 CSc 212 Data Structures.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 10. Pointers & Dynamic Data Structures.
CSIS 123A Lecture 6 Strings & Dynamic Memory. Introduction To The string Class Must include –Part of the std library You can declare an instance like.
Xiaoyan Li, CSC211 Data Structures Lecture 10 The Bag and Sequence Classes with Linked Lists Instructor: Prof. Xiaoyan Li Department of Computer.
February 11, 2005 More Pointers Dynamic Memory Allocation.
This set of notes is adapted from that provided by “Computer Science – A Structured Programming Approach Using C++”, B.A. Forouzan & R.F. Gilberg, Thomson.
1 Programs Composed of Several Functions Syntax Templates Legal C++ Identifiers Assigning Values to Variables Declaring Named Constants String Concatenation.
Pointers Pointer a data type stores a memory address points to whatever the memory location contains A pointer is a variable that can store a memory address.
The basics of the array data structure. Storing information Computer programs (and humans) cannot operate without information. Example: The array data.
Computer Science and Software Engineering University of Wisconsin - Platteville 2. Pointer Yan Shi CS/SE2630 Lecture Notes.
ECE 264 Object-Oriented Software Development Instructor: Dr. Honggang Wang Fall 2012 Lecture 26: Exam 2 Preview.
Pointers OVERVIEW.
Edgardo Molina, CSC212 Data Structure - Section AB Lectures 6/7 Pointers and Dynamic Arrays Instructor: Edgardo Molina Department of Computer Science.
CS Midterm Study Guide Fall General topics Definitions and rules Technical names of things Syntax of C++ constructs Meaning of C++ constructs.
1 C++ Classes and Data Structures Jeffrey S. Childs Chapter 4 Pointers and Dynamic Arrays Jeffrey S. Childs Clarion University of PA © 2008, Prentice Hall.
CPSC 252 Dynamic Memory Allocation Page 1 Dynamic memory allocation Our first IntVector class has some serious limitations the capacity is fixed at MAX_SIZE.
Object-Oriented Programming in C++
Dynamic memory allocation and Pointers Lecture 4.
Pointers. What is pointer l Everything stored in a computer program has a memory address. This is especially true of variables. char c=‘y’; int i=2; According.
Copyright 2005, The Ohio State University 1 Pointers, Dynamic Data, and Reference Types Review on Pointers Reference Variables Dynamic Memory Allocation.
CS 376b Introduction to Computer Vision 01 / 23 / 2008 Instructor: Michael Eckmann.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Stacks.
Edgardo Molina, CSC212 Data Structure - Section AB Lecture 8 Dynamic Classes and the Law of the Big Three Instructor: Edgardo Molina Department.
Review 1 List Data Structure List operations List Implementation Array Linked List.
12/23/2015Engineering Problem Solving with C++, second edition, J. Ingber 1 Engineering Problem Solving with C++, Etter/Ingber Chapter 9 An Introduction.
1 CSC212 Data Structure Lecture 4 Container Classes Instructor: George Wolberg Department of Computer Science City College of New York.
1 Classes II Chapter 7 2 Introduction Continued study of –classes –data abstraction Prepare for operator overloading in next chapter Work with strings.
EEL 3801 C++ as an Enhancement of C. EEL 3801 – Lotzi Bölöni Comments  Can be done with // at the start of the commented line.  The end-of-line terminates.
Xiaoyan Li, CSC211 Data Structures Lecture 8 Dynamic Classes and the Law of the Big Three Instructor: Prof. Xiaoyan Li Department of Computer Science.
Copyright © 2014 Pearson Addison-Wesley. All rights reserved. Chapter 9 Pointers and Dynamic Arrays.
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.
Dr. Yang, QingXiong (with slides borrowed from Dr. Yuen, Joe) LT:10 Advance Pointer Array, String and Dynamic Memory Allocation CS2311 Computer Programming.
Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved X 1 Chapter 7 Pointers and C-Strings.
Pointers Lecture: 5. Topics 1 Pointers and the Address Operator 2 Pointer Variables 3 The Relationship Between Arrays and Pointers 4 Pointer Arithmetic.
Prof. Amr Goneid, AUC1 CSCE 210 Data Structures and Algorithms Prof. Amr Goneid AUC Part R2. Elementary Data Structures.
@ George Wolberg, CSC212 Data Structure Lecture 6 Dynamic Classes and the Law of the Big Three Instructor: George Wolberg Department of Computer.
Dynamic Storage Allocation
Pointers and Dynamic Arrays
EGR 2261 Unit 11 Pointers and Dynamic Variables
Chapter 1-4 CSc 212 Data Structures, Sec AB CCNY, Spring 2012
CSCE 210 Data Structures and Algorithms
The Bag and Sequence Classes with Linked Lists
Chapter 15 Pointers, Dynamic Data, and Reference Types
Pointers, Dynamic Data, and Reference Types
Chapter 15 Pointers, Dynamic Data, and Reference Types
CSC212 Data Structure - Section FG
CSC212 Data Structure - Section RS
EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019
Pointers, Dynamic Data, and Reference Types
Chapter 1-4 CSc 212 Data Structures, Sec FG CCNY, 2009
Presentation transcript:

Xiaoyan Li, CSC211 Data Structures Lectures 6/7 Pointers and Dynamic Arrays Instructor: Prof. Xiaoyan Li Department of Computer Science Mount Holyoke College

Xiaoyan Li, About Quiz 2 from Lecture 5 bool bag::erase_one(const int& target) {if (count(target) = = 0) return false; else { else { for (int i=0; i<used; i++){ for (int i=0; i<used; i++){ if (data[i] = = target){ data[i] = = data[used-1]; data[i] = = data[used-1]; used--; used--; return true; return true;} }}} Q1: data[i] = data[used]; Q2: data[target] = data[used-1];

Xiaoyan Li, Review: (Lecture 5) p Bag class definition/implementation details p Inline functions p constructor, size p Other basic functions p insert, erase_one, erase, count p More advanced functions p operators +, +=, - p Time Analysis p Big-O p Introduction to sequence

Xiaoyan Li, Review: Append Operator += void bag::operator+=(const bag& addend) // Precondition: size( ) + addend.size( ) <= CAPACITY. // Postcondition: Each item in addend has been added to this bag. // Library facilities used: algorithm, cassert { assert(size( ) + addend.size( ) <= CAPACITY); copy(addend.data, addend.data + addend.used, data + used); used += addend.used; } // copy (, ending location>, );

Xiaoyan Li, Review: Union Operator + // NONMEMBER FUNCTION for the bag class: bag operator+(const bag& b1, const bag& b2) // Precondition: b1.size( ) + b2.size( ) <= bag::CAPACITY. // Postcondition: The bag returned is the union of b1 and b2. // Library facilities used: cassert { bag answer; assert(b1.size( ) + b2.size( ) <= bag::CAPACITY); answer += b1; answer += b2; return answer; } // calling program: c =a+b; // Question : what happens if you call a =a+b ? // Question : why operator+ is a nonmember function ?

Xiaoyan Li, Review: Subtract Operator - // NONMEMBER friend FUNCTION for the bag class: bag operator-(const bag& b1, const bag& b2) // Postcondition: For two bags b1 and b2, the bag x-y contains all the items of x, with any items from y removed { size_t index; bag answer(b1); // copy constructor size_t size2 = b2.size(); // use member function size for (index = 0; index < size2; ++index) { int target = b2.data[index]; // use private member variable if (answer.count(target) ) // use function count answer.erase_one(target); // use function erase_one } return answer; }

Xiaoyan Li, Why Friend functions? p A friend function can access all private member variables of a class. p A special feature in C++ (not supported in java or C#)

Xiaoyan Li, Advantages of Friend functions? p Provide a degree of freedom in the interface design options p Choose between member functions (x.f()) and friend functions (f(x)) p Having a public get() and set() member function for a private datum is OK only when the private datum "makes sense" from outside the class. In many cases, they are almost as bad as public data: they hide (only) the name of the private datum, but they don't hide the existence of the private datum. p Should my class declare a member function or a friend function?

Xiaoyan Li, Advantages of Friend functions? p Provide a degree of freedom in the interface design options p Choose between member functions (x.f()) and friend functions (f(x)) p Having a public get() and set() member function for a private datum is OK only when the private datum "makes sense" from outside the class. In many cases, they are almost as bad as public data: they hide (only) the name of the private datum, but they don't hide the existence of the private datum. p Should my class declare a member function or a friend function? p Use a member when you can, and a friend when you have to. (Use it wisely! Do not make too many friends )

Xiaoyan Li, Why Pointers and Dynamic Memory p Limitation of our bag class p class bag { public: static const size_t CAPACITY = 20;... private: int data[CAPACITY]; size_t used; };

Xiaoyan Li, Why Pointers and Dynamic Memory p Limitation of our bag class p bag::CAPACITY constant determines the capacity of every bag p wasteful (if too big) and hard to reuse (if too small) p need to change source code and recompile p Solution: p provide control over size in running time p <= dynamic arrays p <= pointers and dynamic memory

Xiaoyan Li, Outline (Reading Ch 4.1 – 4.2) p Pointers p *(asterisk) and &(ampersand) operators  Dynamic Variables and new Operator p Dynamic Arrays and Dynamic Objects p Stack (local) vs. heap (dynamic) memory  Garbage Collection and delete Operator p Parameters revisited p Pointers and Arrays as Parameters

Xiaoyan Li, Pointer Variable p First let’s have a look at local variables p Q: What’s the value of i? ? … int i;i By this declaration, a cell of 4 adjacent bytes (in some machines) are allocated in the local memory (called stack memory) Address 9## is just for illustration. Real address may have 64 bits

Xiaoyan Li, Pointer Variable p First let’s have a look at local variables p Q: How to get the address? p Q: What is the binary representation of 42? … int i; i = 42;i The assignment put number 42 in the cell. The memory address of the 1 st byte is the address of the variable i – the pointer to i

Xiaoyan Li, Pointer Variable p First let’s have a look at local variables p Q: Where can we store &i? … int i; i = 42; cout << &i;i & (ampersand) operator - “address of ” operator - &i is 900 ! -Note: two meanings of &

Xiaoyan Li, Pointer Variable p The memory address can be stored a special pointer variable p Q: How to point i_ptr to i? 42 ? … int i=42; int *i_ptr;ii_ptr 1. the type of the data that the pointer points to: int 2. an asterisk (*) 3. the name of the newly declared pointer: i_ptr

Xiaoyan Li, Pointer Variable p Assign the address of i to i_ptr 42 ? … int i=42; int *i_ptr; i_ptr = &i;ii_ptr What are the results of -cout << i; -cout << i_ptr; -cout << &i_ptr;

Xiaoyan Li, Pointer Variable p The i_ptr holds the address of an integer, not the integer itself … int i=42; int *i_ptr; i_ptr = &i;ii_ptr Two ways to refer to i -cout << i; -cout << *i_ptr; - dereferencing operator * - dereferencing operator * - two meanings of * - two meanings of *

Xiaoyan Li, Operators * and & p Operator * p Pointer declaration int *i_ptr; p dereferencing operator cout << *i_ptr; p Two different meanings! p Operator & p Reference parameter void funct(int& i); void funct(int& i); p “address of ” operator i_ptr = &i;

Xiaoyan Li, Syntax and Naming Issues p How to declare two pointers in a line char *c1_ptr, *c2_ptr; p instead of char* c1_ptr, c2_ptr;  For clarity, use _ptr or cursor for pointer variables

Xiaoyan Li, Assignment Operators with Pointers p p2 = p1 int i = 42; int *p1, *p2; p1 = &i; p2 = p1; 42i 900 address value name ?p1904?p2908 Both p1 and p2 point to the same integer 900p p ? ? … ip1 p

Xiaoyan Li, Assignment Operators with Pointers p *p2 = *p1 int i = 42; int *p1, *p2; p1 = &i; *p2 = *p1; 42i 900 address value name ?p1904?p2908 p2 doesn’t point to anywhere, so assigning value to *p2 will cause a running time error! 900p ? ? … ip1 p2 900 X

Xiaoyan Li, ?p p1908 ?p p2912 Assignment Operators with Pointers p *p2 = *p1 int i = 42; int j = 20; int *p1, *p2; p1 = &i; p2 = &j; *p2 = *p1;42i900 Both i (*p1) and j (*p2) will have the same integer values ? ? … ij p1 p j904 42j904 42

Xiaoyan Li, Outline (Reading Ch 4.1 – 4.2) p Pointers p *(asterisk) and &(ampersand) operators  Dynamic Variables and new Operator p Dynamic Arrays and Dynamic Objects p Stack (local) vs. heap (dynamic) memory  Garbage Collection and delete Operator p Parameters revisited p Pointers and Arrays as Parameters

Xiaoyan Li, Dynamic Variables p We cannot use a pointer if not initialized p need to point to a declared variable p How to use a pointer without connecting with a declared ordinary variable? p Solution: Dynamic (allocated) variables p not declared, therefore no identifier p created during execution p Real power of pointers is with dynamic variables

Xiaoyan Li, The new Operator p allocates memory and return a pointer ?p1900 int *p1; p1 = new int; *p1 = 20;?? p1 points to a dynamic integer variable without any identifier (name) - p1 points to a dynamic integer variable without any identifier (name) - dynamic memory comes from the programs’ heap (free store) 20?10500 ? … … p1?

Xiaoyan Li, Dynamic Arrays p new can allocate an entire array all at once ?p1900 int *p1; p1 = new int[4]; p1[2] = 20; cout<<*(p1+2); p1 points to 1st entry of dynamic array - p1 points to 1st entry of dynamic array - number of entries in a pair of sq. brackets - two ways to access p1 (array or pointer) ? … … p1?

Xiaoyan Li, Accessing Dynamic Array p Use array notation p the 1 st entry p1[0] = 18; p the 3 rd entry p1[2] = 20; p1[2] = 20; p the ith entry p1[i-1] = 19; p Use pointer notation p the 1 st entry *p1 = 18; p the 3 rd entry *(p1+2) = 20; *(p1+2) = 20; p the ith entry *(p1+i-1) = 19;

Xiaoyan Li, Dynamic Array Example: (2 minutes) p A program read ages of each of MHC classes, with varying sizes, calculate the average, and then print out the average. – think about the variables needed. size_t size; int *ages; float average; cin >> size; ages = new int[size]; // input ages of all students // calculate average // print average …

Xiaoyan Li, Dynamic Objects of a class p new can also allocate a dynamic object ?p1900 point *p1; p1 = new point(1.0, 2.0); cout<< (*p1).get_x(); cout get_x(); - p1 points to dynamic object without name - p1 points to dynamic object without name - parameters can be used as in declaration - two ways to access p1 (* and ->) ? … … p1?

Xiaoyan Li, Array of Dynamic Objects of a class Q: Are the followings correct? point3 demo Q: Are the followings correct? point3 demopoint3 demopoint3 demo p Ten points with default coordinates? p1 = new point[10]; p1 = new point[10]; p Ten points with the same coordinates? p1 = new point(1.0, 2.0)[10]; p1 = new point(1.0, 2.0)[10]; p Ten points on the x axis with interval 1? p1 = new point[10]; p1 = new point[10]; for (i=0; i<10; i++) p1[i].set(i, 0); for (i=0; i<10; i++) p1[i].set(i, 0); Assume we have a member function void point::set(double x_init, double y_init); VXV

Xiaoyan Li, Programming Assignment 2 p Detailed guidelines online! p In addition to your source files, also send in running results of the “exam” programs, Cut & paste in a text file p The prototypes and pre/postconditions of functions in header files should not be changed. p Due Oct. 1 (Monday)

Xiaoyan Li, Review: Pointers from Lecture 6 p What is a pointer? p How to declare a pointer variable? p How to declare more pointers in one line? p Operators & and * (two ways to refer to a variable) p Dynamic variables, dynamic objects, dynamic arrays? (two ways to refer to array elements.) p What is the function of operator “new”?

Xiaoyan Li, Failure of the new Operator p Dynamic memory via new operator comes from heap of a program ( p Dynamic memory via new operator comes from heap of a program (i_ptr = new int; d_ptr = new double[20]; ) p_ptr = new point(1.0, 2.0);) p Heap size from several K to 1GB, however fixed  Could run out of room therefore cause a bad_alloc exception p error message and program halts p Good practice 1: document which functions use new  Good practice 2: garbage collection by delete operator

Xiaoyan Li, Outline (Reading Ch 4.1 – 4.2) p Pointers p *(asterisk) and &(ampersand) operators  Dynamic Variables and new Operator p Dynamic Arrays and Dynamic Objects p Stack (local) vs. heap (dynamic) memory  Garbage Collection and delete Operator p Parameters revisited p Pointers and Arrays as Parameters

Xiaoyan Li, The delete Operator p Release any dynamic memory (heap memory) that is no longer needed int *i_ptr; double *d_ptr; point *p_ptr; i_ptr = new int; d_ptr = new double[20]; p_ptr = new point(1.0, 2.0); … delete i_ptr; delete [ ] d_ptr; // empty brackets delete p_ptr; Questions( true or false): 1. 1.delete resets these pointers 2. 2.delete removes dynamic objects pointed by the pointers 3. 3.nothing happens to the pointers themselves XVV

Xiaoyan Li, Outline (Reading Ch 4.1 – 4.2) (Next Lecture) p Pointers p *(asterisk) and &(ampersand) operators  Dynamic Variables and new Operator p Dynamic Arrays and Dynamic Objects p Stack (local) vs. heap (dynamic) memory  Garbage Collection and delete Operator p Parameters revisited p Pointers and Arrays as Parameters

Xiaoyan Li, Pointers and Arrays as Parameters p Value parameters that are pointers p Array parameters p Pointers and arrays as const parameters p Reference parameters that are pointers

Xiaoyan Li, Value parameters that are pointers p Compare ordinary and pointer variables void print_int_42(int i) { cout << i<<endl ; i = 42 ; cout << i <<endl; } void set_int_42(int* i_ptr) { cout << *i_ptr <<endl; *i_ptr = 42 ; cout << *i_ptr <<endl; } Calling program: int m = 80; print_int_42(m); cout << m<<endl<<endl; set_int_42(&m); cout << m<<endl<<endl;

Xiaoyan Li, Array Parameters p Compare ordinary and Dynamic arrays Calling program: int ages[30]; make_all_20(ages, 30); void make_all_20(int data[ ], size_t size) { for (int i = 0 ; i< size; i++) { data[i] = 20; } - - An array parameter automatically treated as pointer to the first entry (– value or reference?) - - In the function prototype and implementation, size of the array is not specified inside bracket but by another parameter Calling program: int *ages; ages = new int[30] make_all_20(ages, 30);

Xiaoyan Li, Pointers or Array as const Parameters p to make sure they will not be changed Calling program: int *ages, *i_ptr; double aver_age; ages = new int [ 30 ];... aver_age = average(ages, 30); i_ptr = &ages[12]; // i_ptr = (ages+12); if (is_20(i_ptr)) cout <<“Sudent No. 13 is 20!”<<endl; Protoptyes: bool is_20(const int* i_ptr); double average(const int data[ ], size_t size);

Xiaoyan Li, Reference Parameters that are Pointers p if we want to change the pointer to a new location Calling program: int *ages; int jone = 20; // assume &jone is 904 now ages = &jone; cout << “address that ages points to is ”<< ages<<endl; allocate_int_array(ages, 30); cout << “address that ages points to is ”<< ages<<endl; void allocate_int_arrary(int* i_ptr, size_t size) { i_ptr = new int[size]; } X

Xiaoyan Li, Reference Parameters that are Pointers p if we want to change the pointer to a new location Calling program: int *ages; int jone = 20; // assume &jone is 904 now ages = &jone; cout << “address that ages points to is ”<< ages<<endl; allocate_int_array(ages, 30); cout << “address that ages points to is ”<< ages<<endl; void allocate_int_arrary(int*& i_ptr, size_t size) { i_ptr = new int[size]; } V

Xiaoyan Li, Reference Parameters that are Pointers p if we want to change the pointer to a new location Calling program: int *ages; int jone = 20; // assume &jone is 904 now ages = &jone; cout << “address that ages points to is ”<< ages<<endl; allocate_int_array(ages, 30); cout << “address that ages points to is ”<< ages<<endl; typedef int* integer_ptr; void allocate_int_arrary(integer_ptr& i_ptr, size_t size) { i_ptr = new int[size]; } V

Xiaoyan Li, Solution to Assignment 1 //Constructor statistician::statistician( ) { count = 0; // empty sequence count = 0; // empty sequence total = 0; // initial value for total total = 0; // initial value for total // We don't know how to initialize tinyest // We don't know how to initialize tinyest //and largest until we have a first number //and largest until we have a first number}

Xiaoyan Li, Solution to Assignment 1 // MODIFICATION MEMBER FUNCTIONS // MODIFICATION MEMBER FUNCTIONS void statistician::next(double r) { count++; { count++; total += r; total += r; if (count == 1 ) if (count == 1 ) { tinyest = largest = r;} { tinyest = largest = r;} else else { if (r < tinyest) { if (r < tinyest) tinyest = r; tinyest = r; if (r > largest) if (r > largest) largest = r; largest = r; } }

Xiaoyan Li, Solution to Assignment 1 // MODIFICATION MEMBER FUNCTIONS // MODIFICATION MEMBER FUNCTIONS void statistician::reset( ) void statistician::reset( ) { if ( length() == 0) return; if ( length() == 0) return; count = 0; // empty sequence count = 0; // empty sequence total = 0; // initial value for total total = 0; // initial value for total // We don't know how to initialize tinyest and //largest until we have a first number // We don't know how to initialize tinyest and //largest until we have a first number }

Xiaoyan Li, Solution to Assignment 1 // CONSTANT MEMBER FUNCTIONS int statistician::length( ) const { // can use inline function instead // can use inline function instead return count; return count; }

Xiaoyan Li, Solution to Assignment 1 // CONSTANT MEMBER FUNCTIONS // CONSTANT MEMBER FUNCTIONS double statistician::sum( ) const double statistician::sum( ) const { // can use inline function instead // can use inline function instead return total; return total; }

Xiaoyan Li, Solution to Assignment 1 // CONSTANT MEMBER FUNCTIONS double statistician::mean( ) const double statistician::mean( ) const { // precondition length()>0 // precondition length()>0 assert(length( ) > 0); assert(length( ) > 0); return total / count; return total / count; }

Xiaoyan Li, Solution to Assignment 1 // CONSTANT MEMBER FUNCTIONS double statistician::minimum( ) const double statistician::minimum( ) const { // precondition length()>0 // precondition length()>0 assert(length( ) > 0); assert(length( ) > 0); return tinyest; return tinyest; }

Xiaoyan Li, Solution to Assignment 1 // CONSTANT MEMBER FUNCTIONS double statistician::maximum( ) const double statistician::maximum( ) const { // precondition length()>0 // precondition length()>0 assert(length( ) > 0); assert(length( ) > 0); return largest; return largest; }

Xiaoyan Li, Solution to Assignment 1 // FRIEND FUNCTIONS // FRIEND FUNCTIONS statistician operator +(const statistician& s1, const statistician& s2) statistician operator +(const statistician& s1, const statistician& s2) { // Check special cases { // Check special cases if (s1.length() == 0 ) if (s1.length() == 0 ) return s2; return s2; if (s2.length() == 0 ) if (s2.length() == 0 ) return s1; return s1; statistician s; statistician s; s.count = s1.count + s2.count; s.count = s1.count + s2.count; s.total = s1.total + s2.total; s.total = s1.total + s2.total; s.tinyest = (s1.tinyest <= s2.tinyest) ? s1.tinyest: s2.tinyest; s.tinyest = (s1.tinyest <= s2.tinyest) ? s1.tinyest: s2.tinyest; s.largest = (s1.largest >= s2.largest) ? s1.largest: s2.largest; s.largest = (s1.largest >= s2.largest) ? s1.largest: s2.largest; return s; return s; }

Xiaoyan Li, Solution to Assignment 1 // FRIEND FUNCTIONS // FRIEND FUNCTIONS statistician operator *(double scale, const statistician& s) statistician operator *(double scale, const statistician& s) { if (s.length() == 0) return s; { if (s.length() == 0) return s; statistician sx; statistician sx; sx.count = s.count; sx.count = s.count; sx.total = s.total * scale; sx.total = s.total * scale; if (scale >= 0 ) if (scale >= 0 ) { sx.largest = s.largest*scale; { sx.largest = s.largest*scale; sx.tinyest = s.tinyest*scale; sx.tinyest = s.tinyest*scale; } else{sx.largest = s.tinyest*scale; else{sx.largest = s.tinyest*scale; sx.tinyest = s.largest*scale; sx.tinyest = s.largest*scale; } return sx; return sx; }

Xiaoyan Li, Solution to Assignment 1 // NON-MEMBER functions for the statistician class bool operator ==(const statistician& s1, const statistician& s2) bool operator ==(const statistician& s1, const statistician& s2) { if (s1.length() == 0 && s2.length() == 0) { if (s1.length() == 0 && s2.length() == 0) return true; return true; if (s1.length() == 0 && s2.length() !=0) if (s1.length() == 0 && s2.length() !=0) return false; return false; if (s2.length() == 0 && s1.length() !=0) if (s2.length() == 0 && s1.length() !=0) return false; return false; return (s1.length() == s2.length()) && return (s1.length() == s2.length()) && (s1.sum() == s2.sum ()) && (s1.sum() == s2.sum ()) && (s1.minimum() == s2.minimum()) && (s1.minimum() == s2.minimum()) && (s1.maximum() == s2.maximum()) ; (s1.maximum() == s2.maximum()) ; }}

Xiaoyan Li, Reading and Programming Assignments p Reading before the next lecture p Chapter 4. Sections p Dynamic Classes and the Law of the Big Three p Programming Assignment 2 (Reminder) p Detailed guidelines online! p Due Oct. 1 (Monday)