computer notes - switch statement
DESCRIPTION
http://ecomputernotes.com - Computer Notes - Switch Statement on Object orient Programming What is How Use it Explain with Example.TRANSCRIPT
![Page 1: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/1.jpg)
Switch Statement
http://ecomputernotes.com
![Page 2: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/2.jpg)
Problem Statement
• Develop a function that can draw different
types of geometric shapes from an array
http://ecomputernotes.com
![Page 3: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/3.jpg)
Shape Hierarchy
Shape
Line Circle Triangle
draw
calcArea
draw
calcArea
draw
calcArea
draw
calcAreahttp://ecomputernotes.com
![Page 4: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/4.jpg)
Shape Hierarchy
class Shape {…
protected:char _type;
public:Shape() { }void draw(){ cout << “Shape\n”; }int calcArea() { return 0; }char getType() { return _type; }
}
http://ecomputernotes.com
![Page 5: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/5.jpg)
… Shape Hierarchy
class Line : public Shape {
…
public:
Line(Point p1, Point p2) {
…
}
void draw(){ cout << “Line\n”; }
}
http://ecomputernotes.com
![Page 6: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/6.jpg)
… Shape Hierarchy
class Circle : public Shape {…
public:Circle(Point center, double radius) {
…}void draw(){ cout << “Circle\n”; }int calcArea() { … }
}
http://ecomputernotes.com
![Page 7: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/7.jpg)
… Shape Hierarchy
class Triangle : public Shape {
…
public:
Triangle(Line l1, Line l2,
double angle)
{ … }
void draw(){ cout << “Triangle\n”; }
int calcArea() { … }
}
http://ecomputernotes.com
![Page 8: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/8.jpg)
Drawing a Scene
int main() {
Shape* _shape[ 10 ];
Point p1(0, 0), p2(10, 10);
shape[1] = new Line(p1, p2);
shape[2] = new Circle(p1, 15);
…
void drawShapes( shape, 10 );
return 0;
}
http://ecomputernotes.com
![Page 9: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/9.jpg)
Function drawShapes()
void drawShapes(Shape* _shape[],
int size) {
for (int i = 0; i < size; i++) {
_shape[i]->draw();
}
}
http://ecomputernotes.com
![Page 10: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/10.jpg)
Sample Output
Shape
Shape
Shape
Shape
…
http://ecomputernotes.com
![Page 11: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/11.jpg)
Function drawShapes()
void drawShapes(
Shape* _shape[], int size) {
for (int i = 0; i < size; i++) {
// Determine object type with
// switch & accordingly call
// draw() method
}
}
http://ecomputernotes.com
![Page 12: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/12.jpg)
Required Switch Logic
switch ( _shape[i]->getType() )
{
case ‘L’:
static_cast<Line*>(_shape[i])->draw();
break;
case ‘C’:static_cast<Circle*>(_shape[i])
->draw();
break;
…
}
![Page 13: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/13.jpg)
Equivalent If Logic
if ( _shape[i]->getType() == ‘L’ )
static_cast<Line*>(_shape[i])->draw();
else if ( _shape[i]->getType() == ‘C’ ) static_cast<Circle*>(_shape[i])->draw();
…
http://ecomputernotes.com
![Page 14: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/14.jpg)
Sample Output
Line
Circle
Triangle
Circle
…
http://ecomputernotes.com
![Page 15: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/15.jpg)
Problems with Switch Statement
http://ecomputernotes.com
![Page 16: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/16.jpg)
…Delocalized Code
• Consider a function that prints area of each
shape from an input array
http://ecomputernotes.com
![Page 17: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/17.jpg)
Function printArea
void printArea(
Shape* _shape[], int size) {
for (int i = 0; i < size; i++) {
// Print shape name.
// Determine object type with
// switch & accordingly call
// calcArea() method.
}
}
http://ecomputernotes.com
![Page 18: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/18.jpg)
Required Switch Logic
switch ( _shape[i]->getType() ){case ‘L’:
static_cast<Line*>(_shape[i])->calcArea(); break;
case ‘C’:static_cast<Circle*>(_shape[i])
->calcArea(); break;…
}
http://ecomputernotes.com
![Page 19: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/19.jpg)
…Delocalized Code
• The above switch logic is same as was in
function drawArray()
• Further we may need to draw shapes or
calculate area at more than one places in
code
http://ecomputernotes.com
![Page 20: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/20.jpg)
Other Problems
• Programmer may forget a check
• May forget to test all the possible cases
• Hard to maintain
http://ecomputernotes.com
![Page 21: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/21.jpg)
Solution?
• To avoid switch, we need a mechanism that
can select the message target automatically!
http://ecomputernotes.com
![Page 22: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/22.jpg)
Polymorphism Revisited
• In OO model, polymorphism means that
different objects can behave in different ways
for the same message (stimulus)
• Consequently, sender of a message does not
need to know the exact class of receiver
http://ecomputernotes.com
![Page 23: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/23.jpg)
Virtual Functions
• Target of a virtual function call is determined
at run-time
• In C++, we declare a function virtual by
preceding the function header with keyword
“virtual”
class Shape {…virtual void draw();
}http://ecomputernotes.com
![Page 24: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/24.jpg)
Shape Hierarchy
Shape
Line Circle Triangle
draw
calcArea
draw
calcArea
draw
calcArea
draw
calcAreahttp://ecomputernotes.com
![Page 25: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/25.jpg)
…Shape Hierarchy Revisited
class Shape {
…
virtual void draw();
virtual int calcArea();
}
class Line : public Shape {
…
virtual void draw();
}
No type field
http://ecomputernotes.com
![Page 26: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/26.jpg)
… Shape Hierarchy Revisited
class Circle : public Shape {…virtual void draw();virtual int calcArea();
}class Triangle : public Shape {…virtual void draw();virtual int calcArea();
}
http://ecomputernotes.com
![Page 27: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/27.jpg)
Function drawShapes()
void drawShapes(Shape* _shape[], int size) {
for (int i = 0; i < size; i++) {
_shape[i]->draw();
}
}
http://ecomputernotes.com
![Page 28: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/28.jpg)
Sample Output
Line
Circle
Triangle
Circle
…
http://ecomputernotes.com
![Page 29: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/29.jpg)
Function printArea
void printArea(Shape* _shape[], int size) {
for (int i = 0; i < size; i++) {
// Print shape name
cout<< _shape[i]
->calcArea();
cout << endl;
}
}
http://ecomputernotes.com
![Page 30: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/30.jpg)
Static vs Dynamic Binding
• Static binding means that target function for a
call is selected at compile time
• Dynamic binding means that target function for
a call is selected at run time
http://ecomputernotes.com
![Page 31: Computer Notes - Switch Statement](https://reader034.vdocuments.us/reader034/viewer/2022051608/54308d72219acdd64e8b4ebd/html5/thumbnails/31.jpg)
Static vs Dynamic Binding
Line _line;
_line.draw(); // Always Line::draw // called
Shape* _shape = new Line();
_shape->draw(); // Shape::draw called
// if draw() is not virtual
Shape* _shape = new Line();
_shape->draw(); // Line::draw called// if draw() is virtualhttp://ecomputernotes.com