Polymorphism and Inheritance
Polymorphism
Polymorphism ąø«ąø”ąø²ąø¢ąøąø¶ąø ąøąø²ąø£ąø”ąøµąø«ąø„ąø²ąø¢ąø£ąø¹ąøą¹ąøąø ąø«ąø£ąø·ąøąøą¹ąøąø·ąø ą¹ąø 1 ąøąø£ąø°ąøąø§ąøąøąø²ąø£ąø«ąø£ąø·ąøąøąø²ąø£ąøąø£ąø°ąøąø³ąøŖąø²ąø”ąø²ąø£ąøą¹ąøŖąøąøąøąø„ąø„ąø±ąøąøą¹ąø«ąø£ąø·ąøą¹ąøŖąøąøąøąø„ąøąø²ąø£ąøąø£ąø°ąøąø³ą¹ąøą¹ąø”ąø²ąøąøąø§ą¹ąø²ąø«ąøąø¶ą¹ąøąø£ąø¹ąøą¹ąøąø ą¹ąøą¹ąøąøąøąøą¹ąøą¹ąø 2 ąøąø£ąø°ą¹ąø ąø
1. Function Overloading
ąøąø²ąø£ą¹ąøą¹ąøąø·ą¹ąøąøąø±ąøąøą¹ąøąø±ąøą¹ąø«ąø”ąø·ąøąøąøąø±ąø ą¹ąøą¹ąø”ąøµąøąø§ąø²ąø”ąøŖąø²ąø”ąø²ąø£ąøąø«ąø£ąø·ąøąøąøøąøąø„ąø±ąøąø©ąøąø°ąøąøµą¹ą¹ąøąøąøą¹ąø²ąøąøąø±ąø ąø«ąø”ąø²ąø¢ąøąø§ąø²ąø”ąø§ą¹ąø² ąøąø±ąøąøą¹ąøąø±ąøąøŖąø²ąø”ąø²ąø£ąøą¹ąøąø„ąøµą¹ąø¢ąøąøąø³ąøąø§ąøąø²ąø£ąø£ąø±ąøąøąø²ąø£ąø²ąø”ąø“ą¹ąøąøąø£ą¹ąø«ąø£ąø·ąøą¹ąøąø„ąøµą¹ąø¢ąøąøąø£ąø°ą¹ąø ąøąøąø±ąø§ą¹ąøąø£ąøąøąøąøąø²ąø£ąø²ąø”ąø“ą¹ąøąøąø£ą¹
// oop_p3_1.cpp
#include <iostream>
using namespace std;
class function_overlasding
{
public:
// function with 1 int parameter
int func(int x) {
return x + 5;
}
// function with same name but 1 double parameter
void func(double x) {
cout << "value of x is " << x << endl;
}
// function with same name and 2 int parameters
void func(int x, double y) {
cout << "value of x and y is " << x << ", " << y << endl;
}
};
int main() {
function_overlasding obj1;
// Which function is called will depend on the parameters passed
// The first 'func' is called
int a = obj1.func(7);
cout << a << endl;
// The second 'func' is called
obj1.func(9.132);
// The third 'func' is called
obj1.func(85,9.132);
return 0;
}
12
value of x is 9.132
value of x and y is 85, 9.132
ąøąø²ąøąøąø±ąø§ąøąø¢ą¹ąø²ąøąøąø°ą¹ąø«ą¹ąøą¹ąøą¹ąø§ą¹ąø²ąøąø±ąøąøą¹ąøąø±ąøąøąøµą¹ąøąø·ą¹ąø func ąøąø³ąø«ąøą¹ąø²ąøąøµą¹ą¹ąøąøąøą¹ąø²ąøąøąø±ąøą¹ąø 3 ąøŖąøąø²ąøąøąø²ąø£ąøą¹ (ąøąø²ąø£ąø£ąø±ąøąøąø²ąø£ąø²ąø”ąø“ą¹ąøąøąø£ą¹) ąøąøµą¹ą¹ąøąøąøą¹ąø²ąøąøąø±ąø ąøąø¶ą¹ąøą¹ąøą¹ąøąøąøøąøąøŖąø”ąøąø±ąøąø“ąøąøąø Polymorphism
2. Operator Overloading
operator ąøąøµą¹ąøąø³ąøąø²ąøą¹ąøą¹ąø«ąø„ąø²ąø¢ą¹ąøąø ą¹ąøąø«ąø„ąø±ąøąøąø²ąø£ą¹ąøąø“ąøąø§ąø±ąøąøąøøąøąø°ąøą¹ąø§ąø¢ą¹ąø«ą¹ąøŖąø²ąø”ąø²ąø£ąøą¹ąø£ąøµąø¢ąøą¹ąøą¹ą¹ąøąø£ąø·ą¹ąøąøąø«ąø”ąø²ąø¢ą¹ąøą¹ąø +, -, *, / ą¹ąøąøąøąø²ąø£ą¹ąø£ąøµąø¢ąøą¹ąøą¹ą¹ąø”ąøąøąøąøąø«ąø£ąø·ąøąøąø±ąøąøą¹ąøąø±ąøąøąøąø object
// oop_p3_2.cpp
#include <iostream>
using namespace std;
class Complex {
private:
int real, imag;
public:
// first section code
Complex(int r = 0, int i =0) {
real = r; imag = i;
}
// second section code
// This is automatically called when '+' is used with
// between two Complex objects
Complex operator + (Complex const &obj) {
Complex res;
res.real = real + obj.real;
res.imag = imag + obj.imag;
return res;
}
void print() {
cout << real << " + i" << imag << endl;
}
};
int main()
{
Complex c1(10, 5), c2(2, 4);
Complex c3 = c1 + c2; // An example call to "operator+"
c3.print();
}
12 + i9
ąøąø±ąø§ąøąø¢ą¹ąø²ąøą¹ąø«ą¹ąøØąø¶ąøąø©ąø²ą¹ąøąø“ą¹ąø”ą¹ąøąø“ąø” :: ąøąø²ąø£ overload operator ą¹ąø C++
Inheritance
Inheritance ąøąø·ąø ąøąø²ąø£ąøŖąø·ąøąøąøąøąøąø§ąø²ąø”ąøŖąø²ąø”ąø²ąø£ąøąøąøąø class ą¹ąøąøąø²ąø£ąø£ąø±ąøąøąøøąøąøŖąø”ąøąø±ąøąø“ą¹ąø„ąø°ąø„ąø±ąøąø©ąøąø°ąøąø²ąø class ąøąø·ą¹ąø
ąøØąø±ąøąø¢ą¹ąøąøµą¹ąøąø§ąø£ąø£ąø¹ą¹ ::
Sub Class ąøąø·ąø ąøąø„ąø²ąøŖąøąøµą¹ąøŖąø·ąøąøąøąøąøąøøąøąøŖąø”ąøąø±ąøąø“ąøąø²ąøąøąø„ąø²ąøŖąøąø·ą¹ąø ą¹ąø£ąøµąø¢ąøąø§ą¹ąø² ąøąø„ąø²ąøŖąøąøµą¹ą¹ąøą¹ąø£ąø±ąø (Derived Class)
Super Class ąøąø·ąø ąøąø„ąø²ąøŖąøąøµą¹ąø”ąøµąøąøøąøąøŖąø”ąøąø±ąøąø“ąøŖąø·ąøąøąøąøąø«ąø£ąø·ąøąøąøµą¹ąø£ąø¹ą¹ąøąø±ąøąøąø±ąøąø§ą¹ąø²ą¹ąøą¹ąøąøąø„ąø²ąøŖąøąø±ą¹ąøąøą¹ąø (Base Class)
ąøąø²ąøąø ąø²ąø ąø«ąø”ąø²ąø¢ąøąø§ąø²ąø”ąø§ą¹ąø² Animal class ąøąø·ąøąø§ą¹ąø²ą¹ąøą¹ąø Base Class ąøŖą¹ąø§ąø dog class, Cat class ą¹ąø„ąø° Cow class ąøąø°ą¹ąøą¹ąøą¹ąøąøµąø¢ąø Derived Class ąøąøąø Animal class ąøąø¶ą¹ąøąøąø²ąø£ąøŖąø·ąøąøąøąøąøąø§ąø²ąø”ąøŖąø²ąø”ąø²ąø£ąøąøąø°ąø”ąøµąø«ąø„ąø²ąø¢ą¹ąøąø ą¹ąøą¹ą¹ąøąø«ąø±ąø§ąøą¹ąøąøąøµą¹ąøąø°ąøąø„ą¹ąø²ąø§ąøąø¶ąøą¹ąøąøµąø¢ąøą¹ąøą¹ 3 ą¹ąøąø ąøąø·ąø ąøąø²ąø£ąøŖąø·ąøąøąøąøąøąø²ąøą¹ąøąøµąø¢ąø§ (Single Inheritance) ąøąø²ąø£ąøŖąø·ąøąøąøąøąø«ąø„ąø²ąø¢ąø£ąø²ąø¢ąøąø²ąø£ (Multiple Inheritance) ą¹ąø„ąø°ąøąø²ąø£ąøŖąø·ąøąøąøąøąø«ąø„ąø²ąø¢ąøąø°ąøąø±ąø (Multilevel Inheritance)
1. Single Inheritance
ąøąø²ąø£ąøŖąø·ąøąøąøąøąøąø²ąøą¹ąøąøµąø¢ąø§ ąø«ąø”ąø²ąø¢ąøąø§ąø²ąø”ąø§ą¹ąø² 1 Derived Class ąøŖąø²ąø”ąø²ąø£ąøąø£ąø±ąøąøąø²ąø£ąøŖąø·ąøąøąøąøą¹ąøą¹ 1 Base Class ą¹ąøą¹ąø²ąøąø±ą¹ąø
// oop_p3_3.cpp
#include <iostream>
#include <string>
using namespace std;
// Base class
class Vehicle {
public:
string brand = "Ford";
void honk() {
cout << "Tuut, tuut! \n" ;
}
};
// Derived class
class Car: public Vehicle {
public:
string model = "Mustang";
};
int main() {
Car myCar;
myCar.honk();
cout << myCar.brand + " " + myCar.model << endl;
return 0;
}
Tuut, tuut!
Ford Mustang
2. Multiple Inheritance
ąøąø²ąø£ąøŖąø·ąøąøąøąøąø«ąø„ąø²ąø¢ąø«ąø„ąø²ąø¢ąøąø²ąø£ ąø«ąø”ąø²ąø¢ąøąø§ąø²ąø”ąø§ą¹ąø²ą¹ąø 1 Derived Class ąøŖąø²ąø”ąø²ąø£ąøąøŖąø·ąøąøąøąøą¹ąøą¹ąø”ąø²ąøąø§ą¹ąø² 1 Base Class
// oop_p3_4.cpp
#include <iostream>
using namespace std;
// first base class
class Vehicle {
public:
Vehicle()
{
cout << "This is a Vehicle" << endl;
}
};
// second base class
class FourWheeler {
public:
FourWheeler()
{
cout << "This is a 4 wheeler Vehicle" << endl;
}
};
// sub class derived from two base classes
class Car: public Vehicle, public FourWheeler {
};
// main function
int main()
{
// creating object of sub class will
// invoke the constructor of base classes
Car obj;
return 0;
}
This is a Vehicle
This is a 4 wheeler Vehicle
3. Multilevel Inheritance
ąøąø²ąø£ąøŖąø·ąøąøąøąøąø«ąø„ąø²ąø¢ąøąø°ąøąø±ąø ąø«ąø”ąø²ąø¢ąøąø§ąø²ąø”ąø§ą¹ąø² Derived Class ąøŖąø²ąø”ąø²ąø£ąøąø£ąø±ąøąøąø²ąø£ąøŖąø·ąøąøąøąø Base Class ąøąøµą¹ąøŖąø·ąøąøąøąøąøąø±ąøąø”ąø²ąøą¹ąøąøą¹ąøą¹
ąøąø²ąøąø ąø²ąøąøąø°ą¹ąø«ą¹ąøą¹ąøą¹ąø§ą¹ąø² Class C ąøąø°ą¹ąøą¹ąø Base Class ąø«ąø„ąø±ąøąøąøąøąøąø²ąø£ąøŖąø·ąøąøąøąø ąøŖą¹ąø§ąø Class B ąøąø°ą¹ąøą¹ąøąøąø±ą¹ąø Derived Class ąøąøąø Class C ą¹ąø„ąø°ą¹ąøą¹ąø Base Class ąøąøąø Class A ąøąøµąøąøąøµąø«ąøąø¶ą¹ąø ąøąø³ą¹ąø«ą¹ Class A ąøąøµą¹ą¹ąøą¹ąø Derived Class ąøŖąøøąøąøą¹ąø²ąø¢ąøŖąø²ąø”ąø²ąø£ąøąøŖąø·ąøąøąøąøą¹ąøą¹ąøąø±ą¹ąøąøąøøąøąøŖąø”ąøąø±ąøąø“ąøąøąø Class B ą¹ąø„ąø° Class C
// oop_p3_5.cpp
#include <iostream>
using namespace std;
// base class
class Vehicle
{
public:
Vehicle()
{
cout << "This is a Vehicle" << endl;
}
};
class fourWheeler: public Vehicle
{ public:
fourWheeler()
{
cout<<"Objects with 4 wheels are vehicles"<<endl;
}
};
// sub class derived from two base classes
class Car: public fourWheeler{
public:
Car()
{
cout<<"Car has 4 Wheels"<<endl;
}
};
// main function
int main()
{
//creating object of sub class will
//invoke the constructor of base classes
Car obj;
return 0;
}
This is a Vehicle
Objects with 4 wheels are vehicles
Car has 4 Wheels
ąøąø±ąø§ąøąø¢ą¹ąø²ąøą¹ąø«ą¹ąøØąø¶ąøąø©ąø²ą¹ąøąø“ą¹ąø”ą¹ąøąø“ąø” :: Inheritance in C++
Access Specifiers for Inheritance
ąøąø¢ą¹ąø²ąøąøąøµą¹ąøąø£ąø²ąøąøąø±ąøąø§ą¹ąø² Access Specifiers ąøąø°ąø”ąøµąøąø±ą¹ąøąø«ąø”ąø 3 ą¹ąøąø ąøąø·ąø public, private ą¹ąø„ąø°ąøŖąøøąøąøą¹ąø²ąø¢ąøąø·ąø protected ąøąøµą¹ąøąø°ąøąø„ą¹ąø²ąø§ąøąø¶ąøą¹ąøąø«ąø±ąø§ąøą¹ąøąøąøµą¹ ąøąø¶ą¹ąø protected ąøąø°ą¹ąøą¹ąøąøąø²ąø£ąøąøąøøąøąø²ąøąø“ąøąø²ąø£ą¹ąøą¹ąø²ąøąø¶ąøąøą¹ąøąø”ąø¹ąø„ą¹ąøąøąø²ąø° class ąøąøµą¹ą¹ąøą¹ąø Derived class ą¹ąøą¹ąø²ąøąø±ą¹ąø
ąøąø¶ąøą¹ąø”ą¹ąø§ą¹ąø²ą¹ąø Inheritance ąøąø°ą¹ąøą¹ąøąøąø²ąø£ąøŖąø·ąøąøąøąøąøąø§ąø²ąø”ąøŖąø²ąø”ąø²ąø£ąøąøąøąø class ą¹ąøą¹ą¹ąø”ą¹ąøŖąø²ąø”ąø²ąø£ąøąøŖąø·ąøąøąøąøąøąø§ąø²ąø”ąøŖąø²ąø”ąø²ąø£ąøąøąøµą¹ąøąø¹ąøąøąø³ąøąø±ąøąøąø²ąø£ą¹ąøą¹ąø²ąøąø¶ąøą¹ąøąø private ąøąøµą¹ąøąø¢ąø¹ą¹ą¹ąø Base class ąø«ąø”ąø²ąø¢ąøąø§ąø²ąø”ąø§ą¹ąø² ą¹ąø”ą¹ąøŖąø²ąø”ąø²ąø£ąøąøŖąø£ą¹ąø²ąøą¹ąø”ąøąøąøąøąø«ąø£ąø·ąøąøąø±ąøąøą¹ąøąø±ąøąøąøµą¹ąøąø°ą¹ąøą¹ąø²ąøąø¶ąøąøą¹ąøąø”ąø¹ąø„ąøąøµą¹ą¹ąøą¹ąø private ąøąøąø Base class ą¹ąøąø·ą¹ąøąøąøąø²ąøą¹ąø”ąøąøąøąøąø«ąø£ąø·ąøąøąø±ąøąøą¹ąøąø±ąøąøąøµą¹ąøŖąø£ą¹ąø²ąøąøąø¢ąø¹ą¹ąøąøąø class ąøąøµą¹ąø”ąøµąøą¹ąøąø”ąø¹ąø„ąøąøµą¹ąøąø¹ąøąøąø³ąø«ąøąøą¹ąøą¹ąø private
// oop_p3_6.cpp
#include <iostream>
using namespace std;
// Base class
class Employee {
protected: // Protected access specifier
int salary;
};
// Derived class
class Programmer: public Employee {
public:
int bonus;
void setSalary(int s) {
salary = s;
}
int getSalary() {
return salary;
}
};
int main() {
Programmer myObj;
myObj.setSalary(50000);
myObj.bonus = 15000;
cout << "Salary: " << myObj.getSalary() << "\n";
cout << "Bonus: " << myObj.bonus << "\n";
return 0;
}
Salary: 50000
Bonus: 15000
ą¹ąø«ąø„ą¹ąøąøą¹ąø²ąøąøąø“ąø ::
ąøąø³ąøąø²ąø” ąøŖąø²ąø”ąø²ąø£ąøąøąø³ Polymorphism ąø”ąø²ą¹ąøą¹ąøąø±ąø Inheritance ą¹ąøą¹ąø«ąø£ąø·ąøą¹ąø”ą¹
ąøąø³ąøąøąø ąøŖąø²ąø”ąø²ąø£ąøąøąø³ą¹ąøą¹
// oop_p3_8.cpp
#include <iostream>
using namespace std;
// Base class
class Animal {
public:
void animalSound() {
cout << "The animal makes a sound \n" ;
}
};
// Derived class
class Pig : public Animal {
public:
void animalSound() {
cout << "The pig says: wee wee \n" ;
}
};
// Derived class
class Dog : public Animal {
public:
void animalSound() {
cout << "The dog says: bow wow \n" ;
}
};
int main() {
Animal myAnimal;
Pig myPig;
Dog myDog;
myAnimal.animalSound();
myPig.animalSound();
myDog.animalSound();
return 0;
}
The animal makes a sound
The pig says: wee wee
The dog says: bow wow
ąøąø²ąøąøąø±ąø§ąøąø¢ą¹ąø²ąøąøąø°ą¹ąø«ą¹ąøą¹ąøą¹ąø§ą¹ąø²ąøŖąø²ąø”ąø²ąø£ąøą¹ąøą¹ąøąø·ą¹ąøąøąø±ąøąøą¹ąøąø±ąøąø«ąø£ąø·ąøą¹ąø”ąøąøąøąøąøą¹ąø³ąøąø±ąøą¹ąøą¹ąøąø²ąø”ąø«ąø„ąø±ąøąøąø²ąø£ąøąøąø Polymorphism ą¹ąøą¹ąøąø°ąøąø²ąø£ąøąøµą¹ąøąø°ą¹ąøŖąøąøąøąø„ąø„ąø±ąøąøą¹ąøąøµą¹ą¹ąøąøąøą¹ąø²ąøąøąø±ąøąøą¹ąøąøą¹ąø«ą¹ object ąøąø£ąø°ąøąø²ąøØą¹ąø£ąøµąø¢ąøą¹ąøą¹ class ą¹ąøąø·ą¹ąøą¹ąøą¹ąø²ąøąø¶ąøąøąø±ąøąøą¹ąøąø±ąøąø«ąø£ąø·ąøą¹ąø”ąøąøąøąøąøąøµą¹ąø”ąøµąøąø„ąø„ąø±ąøąøą¹ąøąø²ąø”ąøąøµą¹ąøą¹ąøąøąøąø²ąø£
Last updated
Was this helpful?