-
Notifications
You must be signed in to change notification settings - Fork 0
/
6-Polymorphism.cpp
154 lines (139 loc) · 3 KB
/
6-Polymorphism.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
*Function Overriding
• Redefining a function of base class in derived class
• Function overriding is used for achieving runtime polymorphism
• Prototype of a overrides function must be exactly same as base class function
*/
#include <iostream>
using namespace std;
class Base
{
public:
void fun()
{
cout << "fun of Base " << endl;
}
};
class Derived : public Base
{
public:
void fun() // Over-riding
{
cout << "fun of Derived " << endl;
}
};
int main()
{
Derived d;
d.fun();
}
/*
* Virtual Functions
• Virtual functions are used for achieving polymorphism
• Base class can have virtual functions
• Virtual functions can be overrides in derived class
• Pure virtual functions must be overrides by derived class
*/
class base
{
public:
virtual void fun()
{
cout << "fun of base" << endl;
}
};
class derived : public base
{
public:
void fun()
{
cout << "fun of derived" << endl;
}
/*
int main()
{
derived d;
d.fun();
base *ptr=&d;
ptr->fun();
}
*/
};
// --------------------------------------------------------------------------
class BasicCar
{
public:
virtual void start()
{
cout << "BasicCar started" << endl;
}
};
class AdvanceCar : public BasicCar
{
public:
void start()
{
cout << "AdvanceCar Started" << endl;
}
};
int main()
{
BasicCar *p = new AdvanceCar();
// Without "Virtual" function called on Basis of "Pointer Not Object"
p->start(); // Output - AdvanceCar Started
}
/*
*Abstract Function
If a member function is not having a body then it is an abstract function.
Example:
class Test
{
public:
void fun(); // body is not defined outside
};
*Abstract Class
If a class is having an abstract function then class becomes abstract.
If a class is having pure virtual function then it becomes abstract.
We can declare pointer of abstract class
We can create object of abstract class but cannot call undefined functions.
Abstract classes are useful for achieving polymorphism.
*Can we overriding private function?
you can override but can't achieve polymorphism because private members cannot be called on object.
*If a base class has both concrete functions and pure virtual functions then can we create an object of that base class?
Yes you can create the object of a class but cannot call undefined functions.
*/
class car
{
public:
virtual void start()
{
cout << "car started" << endl;
}
/*
virtual void start()=0;
"PURE Virtual Function"
*/
};
class innova : public car
{
public:
void start()
{
cout << "innova started" << endl;
}
};
class swift : public car
{
public:
void start()
{
cout << "swift started" << endl;
}
};
int main()
{
car *ptr = new innova();
ptr->start();
p = new swift();
ptr->start();
}