cs 101: computer programming and utilizationcs101/2019.1/lectures/lecture19.pdflecture 19:more...
TRANSCRIPT
![Page 1: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/1.jpg)
Autumn 2019 CS101@CSE IIT Bombay
CS 101:Computer Programming and
Utilization
Puruwith
CS101 TAs and Staff
Course webpage: https://www.cse.iitb.ac.in/~cs101/
Lecture 19: more Structures, Classes and Objects
![Page 2: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/2.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Object Oriented Programming
A methodology for designing programs
2
![Page 3: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/3.jpg)
Autumn 2019 CS101@CSE IIT Bombay
On Design
• Whenever you design something complex, it is useful to have a plan
• Example: Plan for designing a building:
− Understand the requirements− Understand the constraints: budget, land area− Plan how many floors to have− What should be on each floor
• A plan/methodology is also useful when designing (large) projects and similarly while designing programs
3
![Page 4: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/4.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Object Oriented Programming
• Understand what is required and write clear specifications (needed in all methodologies)
• Identify the entities involved in the problemE.g., in a library management program: books, patrons
• Identify the information associated with each entity− Fixed information: name of the book− Variable information (state): who has borrowed the book at
present
• Organize code so that the entities and their actions/inter relationships are explicitly represented in the code− Information associated with entities: structure variables− Relationships/actions of entities: functions
4
![Page 5: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/5.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The C++ structure
• Member variables− Basic facility provided in C++ to conveniently gather together
information associated with an entity− Inherited from the C language
• Member functions− New feature introduced in C++− Actions/operations that effect the entity
− User defined data type with variables and functions
5
![Page 6: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/6.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Defining a structure type
General formstruct structure-type{
member1-type member1-name;member2-type member2-name;...
}; // Don’t forget the semicolon!
Examplestruct Book{
char title[50];double price;
};
A structure-type is a user-defined data type, just as int, char, doubleare primitive data typesStructure-type name and member names can be any identifiers
6
![Page 7: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/7.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Nested structures (structure is a data type!)
struct Point{ double x,y;
};
struct Disk{ Point center; // contains Pointdouble radius;
};
Disk d;d.radius = 10;d.center = {15, 20}; // sets the x {member of center member of d
7
![Page 8: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/8.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Parameter Passing by Valuestruct Point{double x, y;};
Point midpoint(Point a, Point b){Point mp;mp.x = (a.x + b.x)/2;mp.y = (a.y + b.y)/2;return mp;
}
int main(){Point p={10,20}, q={50,60};Point r = midpoint(p,q);cout << r.x << endl;cout << midpoint(p,q).x << endl;
}
8
![Page 9: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/9.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Parameter Passing by Reference
struct Point{double x, y;};
Point midpoint( const Point &a, const Point &b){Point mp;mp.x = (a.x + b.x)/2;mp.y = (a.y + b.y)/2;return mp;
}
int main(){Point p={10,20}, q={50,60};Point r = midpoint(p,q);cout << r.x << endl;
}
9
![Page 10: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/10.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Using struct V3V3 sum(const V3 &a, const V3 &b){
V3 v;v.x = a.x + b.x; v.y = a.y + b.y; v.z = a.z + b.z;return v;
}
V3 scale(const V3 &a, double f){V3 v;v.x = a.x * f; v.y = a.y * f; v.z = a.z * f;return v;
}
double length(const V3 &v){return sqrt(v.x*v.x + v.y*v.y + v.z*v.z);
}
10
![Page 11: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/11.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Member functions
• It is not enough to just define a struct to hold vectors, usually we will also define functions which work on structures/entiries
• In C++, you can make the functions a part of the struct definition itself. Such functions are called member functions.
• By collecting together relevant functions into the definition of the struct, the code becomes better organized (object oriented!)
11
![Page 12: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/12.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The Complete Definition of V3struct V3{
double x, y, z;double length const(){
return sqrt(x*x + y*y + z*z);}V3 sum const(V3 b){
V3 v;v.x = x+b.x; v.y=y+b.y; v.z=z+b.z;return v;
}V3 scale const(double f){
V3 v;v.x = x*f; v.y = y*f; v.z = z*f;return v;
}}
12
![Page 13: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/13.jpg)
Autumn 2019 CS101@CSE IIT Bombay
One More Example: Taxi Dispatch
• Problem statement: Clients arrive and have to be assigned to (earliest waiting) taxies
• An important part of the solution was a blackboard on which we wrote down the ids of the waiting taxies
• How would we implement this using OOP?– Create a struct to represent each entity:
– customer, taxi, blackboard?
13
![Page 14: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/14.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The Queue structureconst int N=100;
struct Queue{int elements[N], nwaiting,front;bool insert(int v){
…}
bool remove(int &v){…
}};
14
![Page 15: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/15.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Member Function Insert
• A value can be inserted only if the queue has space• The value must be inserted into the next empty index in the queue• The number of waiting elements in the queue is updated• Return value indicates whether operation was successful
15
![Page 16: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/16.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Member Function Insert
• A value can be inserted only if the queue has space• The value must be inserted into the next empty index in the queue• The number of waiting elements in the queue is updated• Return value indicates whether operation was successful
struct Queue{…bool insert(int v){
if(nWaiting >= N) return false;elements[(front + nWaiting)%N] = v; nWaiting++;return true;
}};
16
![Page 17: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/17.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Member Function remove
• A value can be removed only if the queue is non-empty• The value must be removed from the front of the queue. The front
should be incremented mod N• The number of waiting elements in the queue is decremented by 1• Return value indicates whether operation was successful
struct Queue{…bool remove(int &v){
if(nWaiting < 1) return false;v=elements[front]; front=(front+1)%N; nWaiting--;return true;
}};
17
![Page 18: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/18.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Main Program
int main(){Queue q;q.front = q.nWaiting = 0;while(true){char c; cin >> c;if(c == ‘d’){int driver; cin >> driver;if(!q.insert(driver)) cout <<“Q is full\n”;
}else if(c == ‘c’){int driver;if(!q.remove(driver)) cout <<“No taxiavailable”;else cout <<“Assigning <<driver<< endl;
}}
18
![Page 19: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/19.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Remarks
• The member functions only contain the logic of how to
manage the queue
• The main program only contains the logic of dealing with
taxis and customers
• The new program has become simpler compared to the earlier
version, where the above two were mixed up together
19
![Page 20: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/20.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Structures vs Arrays
• User defined data type, collection of variables of multiple types
• Members can be accessed using the “.” operator
• Structure name denotes the super variable consisting of the entire collection of contained variables
• Structures can be copied using assignments. Also copied when passed by value, or returned from a function
• Member functions can be written to represent actions of the entities represented by the structure
20
• Collection of variables of single data type
• Members can be accessed using the “[ ]” operator
• Array name denotes pointer to first element of array
• Array elements need to be explicity copied
• Array elements can be accessed by an expression whose value can be computed at run time
![Page 21: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/21.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Objects As Software Components
• A software component can be built around a struct
• Just as a hardware component is useful for building big hardware
systems,
so is a software component for building large software systems
• A software component must be convenient to use, and also safe,
i.e., help in preventing programming errors
21
![Page 22: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/22.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Packaged software components
• Hardware devices that you buy from the market are packaged, and made safe to use
– Fridge, television : no danger of getting an electric shock.– A “control panel” is provided on the device. A user does not
have to change capacitor values to change the channel on a television
22
![Page 23: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/23.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Packaged software components
• Analogous idea for software:– Make functionality associated with a struct available to the
user only through member functions (control panel)– Do not allow the user to directly access the data members
inside a struct. (Just as a user cannot touch the circuitry) The user does not need to know what goes on inside
• If you build a better fridge but keep the control panel the same as the previous model, the user does not need to relearn how to use the new fridge– If you build a better version of the struct, but keep the
member functions the same, the programs that use the struct need not change
– Reusable, modular, abstract!
23
![Page 24: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/24.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The modern version of a struct
• Can behave like a packaged component
• Designer of the struct provides member functions
• Designer of the struct decides what happens during execution of
standard operations
• Once structs are designed in this manner, using them becomes convenient and less error-prone
• Structs endowed with above features are more commonly called
objects
24
![Page 25: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/25.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The modern version of a struct
• Designer of the struct decides what happens during execution of
standard operations such as:
– Creation of the object
– Assignment
– Passing the object to a function
– Returning the object from a function
– Destroying the object when it is not needed
25
![Page 26: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/26.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Structures, Classes and Objects
• Constructors• Copy Constructors• Destructors• Operator overloading• Overloading the assignment operator• Access control• Classes• Graphics and input/output classes
26
![Page 27: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/27.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The Queue Struct in Taxi Dispatch
const int N=100;struct queue{int elements[N],
nWaiting,front;bool insert(int v){…}
book remove(int &v){…
}};
• Once the queue is created, we expect it to be used only through the member functions, insert and remove
• Ideally, we do not expect/want elements, nWaiting, front to be directly accessed
27
![Page 28: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/28.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Main Program Using Queueint main(){Queue q;q.front = q.nWaiting = 0;
while(true){char c; cin >> c;if(c == ‘d’){int driver; cin >> driver;if(!q.insert(driver)) cout <<“Q is full\n”;
}else if(c == ‘c’){int driver;if(!q.remove(driver)) . . .
• Main program does use qthrough operations insert and remove
• However, at the beginning, q.front and q.nWaiting are directly manipulated
• Against the philosophy of software packaging!
28
![Page 29: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/29.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The Constructor member function
• In C++, the programmer can define a special member function called a constructor which will always be called when an instance of the struct is created
• A constructor has the same name as the struct, and has no return type
• Why useful?
29
![Page 30: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/30.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The Constructor member function
• When q is created in the main program, the constructor is called automatically
struct Queue{int elements[N], front,
nWaiting;Queue(){ // constructornWaiting = 0;front = 0;
}// other member functions
};int main(){Queue q;// no need to set// q.nWaiting, q.front// to 0.
}30
![Page 31: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/31.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Constructors In General
struct A{…A(parameters){…}
};
int main(){A x(arguments);
}
• Constructor can take arguments• The creation of the object x in
main can be thought of as happening in two steps– Memory is allocated for x– The constructor is called on x
with the given arguments
• Many constructors possible, provided they have different signatures
31
![Page 32: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/32.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Another example: Constructor for V3struct V3{double x,y,z;V3(){x = y = z = 0;
}V3(double a){x = y = z = a;
}};
int main();V3 v1(5), v2;
}
• When defining v1, an argument is given
• So the constructor taking a single argument is called. Thus each component of v1 is set to 5
• When defining v2, no argument is given.
• So the constructor taking no arguments gets called. Thus each component of v2 is set to 0
32
![Page 33: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/33.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Remarks• If and only if programmer does not define a constructor, will C++
define a constructor which takes no arguments, and does nothing– If a constructor taking arguments is defined, you implicitly tell
C++ that you want programmers to give arguments. – if some programmer does not give arguments, C++ will flag it as
an error– If you want both kinds of initialization, define both kinds of
constructor• A constructor that does not take arguments (defined programmer
or by C++) is called a default constructor• If you define an array of struct, each element is initialized using
the default constructor
33
![Page 34: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/34.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The Copy Constructor
• Suppose an object is passed by value to a function– It must be copied to the variable denoted by the parameter
• Suppose an object is returned by a function– The value returned must be copied to a temporary variable in
the calling program
• By default the copying operations are implemented by copying each member of one object to the corresponding member of the other object– this default behaviour can be changed by defining a copy
constructor
34
![Page 35: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/35.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Example
struct Queue{int elements[N], nWaiting, front;
Queue(const Queue &source){ // Copy constructorfront = source.front;nWaiting = source.nWaiting;
for(int i=front, j=0; j<nWaiting; j++){elements[i] = source.elements[i];i = (i+1) % N;
}
};
35
![Page 36: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/36.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Copy Constructor in the Example
• The copy constructor must take a single reference argument: the object which is to be copied
• Note that the argument to the copy constructor must be a reference, otherwise the copy constructor will have to be called to copy the argument!
• This is will result in an unending recursion• Member elements are not copied fully. Only the useful part of it is
copied– More efficient
• More interesting use later
struct Queue{int elements[N], nWaiting, front;Queue(const Queue &source){ // Copy constructor
……}
};
36
![Page 37: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/37.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Tracking the use of constructorsstruct Queue{int copyID;Queue(){
cout << "copyId=" << copyId;}Queue(const Queue &source){copyId = source.copyId;cout << "copyId=" << copyId;
}};
Queue updateQueue(Queue q){q.copyId = 3;return q;
}int main(){Queue q;q.copyId = 1;
Queue r(q);r.copyId = 2;
Queue z=updateQueue(r);}
37
What will be printed?
![Page 38: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/38.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Destructors
• When control goes out of a block in which a variable is defined,
that variable is destroyed
– Memory allocated for that variable is reclaimed
• You can define a destructor function, which will get executed
before the memory is reclaimed
38
![Page 39: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/39.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Destructor Example
• If a queue that you have defined goes out of scope, it will be destroyed
• If the queue contains elements at the time of destruction, it is likely an error
• So you may want to print a message warning the user• It is usually an error to call the destructor explicitly. It will be called
automatically when an object is to be destroyed. It should not get called twice.
• More interesting uses of the destructor will be considered in later chapters.
39
![Page 40: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/40.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Destructor Example
struct Queue{int elements[N], nWaiting, front;. . .
~Queue(){ //Destructorif(nWaiting>0) cout << “Warning:” <<“ non-empty queue being destroyed.” << endl;
}
};
40
![Page 41: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/41.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Operator Overloading
• In Mathematics, arithmetic operators are used with numbers, but also other objects such as
41
![Page 42: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/42.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Operator Overloading
• In Mathematics, arithmetic operators are used with numbers, but also other objects such as vectors
• Something like this is also possible in C++!
• An expression such as x @ y where @ is any “infix” operator is considered by C++ to be equivalent to x.operator@(y) in which operator@ is a member function
• If the member function operator@ is defined, then that is called to execute x @ y
42
![Page 43: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/43.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Example: Arithmetic on V3 objects
struct V3{double x, y, z;V3(double a, double b, double c){x=a; y=b; z=c;
}
V3 operator+(V3 b){ // adding two V3sreturn V3(x+b.x, y+b.y, z+b.z); // constructor call
}
V3 operator*(double f){ // multiplying a V3 by freturn V3(x*f, y*f, z*f); // constructor call
}};
43
![Page 44: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/44.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Using V3 Arithmetic
int main(){
V3 u(1,2,3), a(4,5,6), s;
double t=10;
s = u*t + a*t*t*0.5;
cout << s.x <<‘ ‘<< s.y <<‘ ‘
<< s.z << endl;
}
44
![Page 45: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/45.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Remarks
• Expression involving vectors can be made to look very much like what you studied in Physics
• Other operators can also be overloaded, including unary operators (see the book)
• Overload operators only if they have a natural interpretation for the struct in question
• Otherwise you will confuse the reader of your program
45
![Page 46: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/46.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Pointers to Structures
• Disk d1={{2,3},4}, *dptr;
• *dptr is defined to have type Disk, so dptr is a pointer to a variable
of type Disk
• Normal pointer operations are allowed on structure pointers
• dptr = &d1;
• (*dptr).radius = 5; //changes the radius of d1
• Operator ->– (*x).y is same as x->y
• dptr->radius = 5; // same effect as above
46
![Page 47: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/47.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Pointers as Structure Members
struct Disk2{double radius;Point *centerptr;
}
Point p={10,20};Disk2 d;d.centerptr = &p;cout << d.centerptr->x << endl; // will print 10.
47
![Page 48: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/48.jpg)
Autumn 2019 CS101@CSE IIT Bombay
The this Pointer• So far, we have not provided a way to refer to the receiver itself inside the
definition of a member function.
• Within the body of a member function, the keyword this points to the receiver i.e., the struct on which the member function has been invoked.
• Trivial use: write this->member instead of member directly
struct V3{double x, y, z;double length(){
return sqrt(this->x * this->x+ this->y * this->y + this->z * this->z);
}}
• More interesting use later.
48
![Page 49: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/49.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Overloading The Assignment Operator
• Normally if you assign one struct to another, each member of the rhs is copied to the corresponding member of the lhs
• You can change this behaviour by defining member function operator= for the struct
• A return type must be defined if you wish to allow chained assignments, i.e., v1 = v2 = v3; which means v1 = (v2 = v3);– The operation must return a reference to the left hand side
object
49
![Page 50: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/50.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Examplestruct Queue{...
Queue& operator=(Queue &rhs){front = rhs.front;nWaiting = rhs.nWaiting;
for(int i=0; i<nWaiting; i++){elements[i] = rhs.elements[i];i = (i+1) % N;
}return *this;
}
};// only the relevant elements are copied
50
![Page 51: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/51.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Access Control
• It is possible to restrict access to members or member functions of a struct
• Members declared public: no restriction
• Members declared private: Can be accessed only inside the definition of the struct
• Typical strategy:
Declare all data members to be private, and
some subset of function members to be public
51
![Page 52: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/52.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Access Control Example
struct Queue{private:int elements[N], nWaiting, front;
public:Queue(){ … } bool insert(int v){ ..
}bool remove(int &v){ ..
}};
52
![Page 53: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/53.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Remarks
• public:, private: : access specifiers
• An access specifier applies to all members defined following it, until another specifier is given
• Thus elements, nWaiting, front are private, while Queue(), insert, remove are public
53
![Page 54: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/54.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Remarks
• The default versions of the constructor, copy constructor, destructor, assignment operator are public
• If you specify any of these as private, then they cannot be invoked outside of the struct definition
• Thus if you make the copy constructor of a struct X private, then you will get an error if you try to pass a struct of type X by value
• Thus, as a designer of a struct, you can exercise great control over how the struct gets used
54
![Page 55: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/55.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Classes
• A class is essentially the same as a struct, except:– Any members/member functions in a struct are public by
default– Any members/member functions in a class are private by
default
55
![Page 56: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/56.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Classes
• Example: a Queue class:
class Queue{int elements[N], nWaiting, front;
public:Queue(){…}bool remove(int &v){…}bool insert(int v){…}
};
• The members - elements, nWaiting and front will be private.
56
![Page 57: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/57.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Example
struct V3{double x,y,z;V3(double v){x = y = z = v;
}double X(){return x;
}};
struct V3{double x,y,z;V3(double v);double X();
};
//implementationsV3::V3(double v){x = y = z = v;
}double V3::X(){return x;
}
57
![Page 58: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/58.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Concluding Remarks
• The notion of a packaged software component is important. • Making data members private: hiding the implementation from the
user• Making some member functions public: providing an interface
using which the object can be used• Separation of the concerns of the developer and the user• Idea similar to what we discussed in connection with ordinary
functions– The specification of the function must be clearly written down
(analogous to interface)– The user should not worry about how the function does its
work (analogous to hiding data members)
58
![Page 59: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/59.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Input Output Classes
• cin, cout : objects of class istream, ostream resp. predefined in C++• <<, >> : operators defined for the objects of these classes• ifstream: another class like istream• You create an object of class ifstream and associate it with a file on
your computer• Now you can read from that file by invoking the >> operator!• ofstream: a class like ostream, to be used for writing to files• Must include header file <fstream> to uses ifstream and ofstream
59
![Page 60: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/60.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Example of file i/o
#include <fstream>#include <simplecpp>int main(){ifstream infile(“f1.txt”);// constructor call. object infile is created and associated// with f1.txt, which must be present in the current directoryofstream outfile(“f2.txt”);// constructor call. Object outfile is created and associated // with f2.txt, which will get created in the current directory
60
![Page 61: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/61.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Example of file i/o
repeat(10){int v;infile >> v;outfile << v;
}// f1.txt must begin with 10 numbers. These will be read and// written to file f2.txt
}
61
![Page 62: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/62.jpg)
Autumn 2019 CS101@CSE IIT Bombay
“String theory”
• Iterative computations are demonstrated well on arrays
• strings … luckily the system manages the array space for us
• Can assign and append to strings• Can read a position: cout << message[px]• Can write a position: message[px] = ‘q’• That’s all we need for now
62
![Page 63: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/63.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Printing a string in reverse
string message;getline(cin, message);int mx = message.size()-1;while (mx >= 0) {
cout << message[mx];--mx;
}• mx updated in a completely predictable way• Ideal candidate to write as for loop
Character at position mx in
string message
63
![Page 64: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/64.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Finding needles in a haystack
• Given two strings, needles and haystack• needles has no repeated characters• haystack may repeat characters• How many characters in needles appear in
haystack at least once?• needles = “bat”, haystack = “tabla” à 3• needles = “tab”, haystack = “bottle” à 2
64
![Page 65: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/65.jpg)
Autumn 2019 CS101@CSE IIT Bombay
One needle in a haystack
• Subproblem: given one character ch and a string find if ch appears in string at least once
char ch; // suitably initializedstring haystack; // suitably initializedint ans = 0; // will change to 1 if foundfor (int hx = 0; hx < haystack.size(); ++hx) {
if (ch == haystack[hx]) {++ans;break; // quit on first match
}}
65
![Page 66: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/66.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Many needles: nested loop
main() {string needles, haystack;getline(cin, needles); getline(cin, haystack);int ans = 0;for (int nx=0; nx < needles.size(); ++nx) {
char ch = needles[nx];for (int hx = 0; hx < haystack.size(); ++hx) {
if (ch == haystack[hx]) {++ans;break; // quit on first match
}} // ends haystack loop
} // ends needles loop}
Generalize to work in case needles can also
have repeated characters
66
![Page 67: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/67.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Duplicate needles
• needles = “bat”, haystack = “tabla” à 3• needles = “tab”, haystack = “bottle” à 2• needles = “bata”, haystack = “tabla” à 3• Two approaches
– Dedup needles before executing earlier code (reducing to known problem)
– Dedup needles “on the fly” (inside the nx loop)Exercise: If the input strings have n and h characters, at most how much time does
the needle-in-haystack search code take?
67
![Page 68: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/68.jpg)
Autumn 2019 CS101@CSE IIT Bombay
Generalize to arbitrary lengths
• “Hello” < “Help” but “Hello” > “Hell”• Scan both strings from the beginning• If differing character found, same as before• If a string ends, it is “less” than the otherint ans=0, ax=0, bx=0, an=as.size(), bn=bs.size();for (; ans==0 && ax < an && bx < bn; ++ax, ++bx) {
if ( (ans = as[ax] – bs[bx]) != 0) break;}if (ans == 0) {
ans = an – bn;}
This results in an arbitrary integer as the return value in case of unequal input string lengths, but the sign of
ans is what is important68
![Page 69: CS 101: Computer Programming and Utilizationcs101/2019.1/lectures/Lecture19.pdfLecture 19:more Structures, Classes and Objects. Autumn 2019 CS101@CSE IIT Bombay Object Oriented Programming](https://reader034.vdocuments.us/reader034/viewer/2022051908/5ffaf70bb08f9673b2668535/html5/thumbnails/69.jpg)
Autumn 2019 CS101@CSE IIT Bombay
break
while (true) {ans += base/fac;base *= x;fac *= (++ix);if (base/fac < epsilon) {
break;}cout << (base/fac) << endl;
}
Terminates immediately enclosing while loop
69