0% found this document useful (0 votes)
7 views15 pages

B.C.A Study: Inheritance

The document provides an overview of inheritance and polymorphism in C++, detailing various types of inheritance such as single, multilevel, multiple, hierarchical, and hybrid inheritance. It explains the concepts of access control in inheritance, compile-time and runtime polymorphism, as well as function overloading and overriding, highlighting their differences and use cases. Code examples are included to illustrate these concepts effectively.

Uploaded by

ss8971132
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views15 pages

B.C.A Study: Inheritance

The document provides an overview of inheritance and polymorphism in C++, detailing various types of inheritance such as single, multilevel, multiple, hierarchical, and hybrid inheritance. It explains the concepts of access control in inheritance, compile-time and runtime polymorphism, as well as function overloading and overriding, highlighting their differences and use cases. Code examples are included to illustrate these concepts effectively.

Uploaded by

ss8971132
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

B.C.

A study

Unit 3 Inheritance and polymorphism

Inheritance

In C++, it is possible to inherit attributes and methods from one class to another. We group the “inheritance
concept” into two categories:

derived class (child) – the class that inherits from another class
base class (parent) – the class being inherited from

Implementing inheritance in C++: For creating a sub-class which is inherited from the base class we
have to follow the below syntax.
Syntax:

class subclass_name : access_mode base_class_name


{
//body of subclass
};

Here, subclass_name is the name of the sub class, access_mode is the mode in which you want to inherit
this sub class for example: public, private etc. and base_class_name is the name of the base class from
which you want to inherit the sub class.
Note: A derived class doesn’t inherit access to private data members. However, it does inherit a full parent
object, which contains any private members which that class declares.

class derivation list names one or more base classes and has the form −

class derived-class: access-specifier base-class

Where access-specifier is one of public, protected, or private, and base-class is the name of a previously
defined class. If the access-specifier is not used, then it is private by default.
Consider a base class Shape and its derived class Rectangle as follows −

#include <iostream>

using namespace std;

// Base class
class Shape {
public:
void setWidth(int w) {
width = w;
}
void setHeight(int h) {
height = h;
}

protected:
int width;
int height;
};

// Derived class
class Rectangle: public Shape {
public:
int getArea() {
return (width * height);
}
};

int main(void) {
Rectangle Rect;

Rect.setWidth(5);
Rect.setHeight(7);
cout << "Total area: " << Rect.getArea() << endl;

return 0;
}

When the above code is compiled and executed, it produces the following result −

Total area: 35
Access Control and Inheritance

A derived class can access all the non-private members of its base class. Thus base-class members that
should not be accessible to the member functions of derived classes should be declared private in the base
class.

We can summarize the different access types according to – who can access them in the following way −

A derived class inherits all base class methods with the following exceptions −

Constructors, destructors and copy constructors of the base class.


Overloaded operators of the base class.
The friend functions of the base class

We hardly use protected or privateinheritance, but public inheritance is commonly used. While using
different type of inheritance, following rules are applied −

Public Inheritance − When deriving a class from a public base class, publicmembers of the base
class become public members of the derived class and protected members of the base class
become protected members of the derived class. A base class’s private members are never accessible
directly from a derived class, but can be accessed through calls to the public and protectedmembers
of the base class.
Protected Inheritance − When deriving from a protected base
class, public and protected members of the base class become protectedmembers of the derived
class.
Private Inheritance − When deriving from a private base class, public and protected members of
the base class become private members of the derived class.

Types of Inheritance in C++

1) Single inheritance
2) Multilevel inheritance
3) Multiple inheritance
4) Hierarchical inheritance
5) Hybrid inheritance

Single inheritance

In Single inheritance one class inherits one class exactly.


For example: Lets say we have class A and B

B inherits A

Example of Single inheritance:


#include <iostream>
using namespace std;
class A {
public:
A(){
cout<<"Constructor of A class"<<endl;
}
};
class B: public A {
public:
B(){
cout<<"Constructor of B class";
}
};
int main() {
//Creating object of class B
B obj;
return 0;
}

Output:

Constructor of A class
Constructor of B class

2)Multilevel Inheritance

In this type of inheritance one class inherits another child class.

C inherits B and B inherits A

Example of Multilevel inheritance:


#include <iostream>
using namespace std;
class A {
public:
A(){
cout<<"Constructor of A class"<<endl;
}
};
class B: public A {
public:
B(){
cout<<"Constructor of B class"<<endl;
}
};
class C: public B {
public:
C(){
cout<<"Constructor of C class"<<endl;
}
};
int main() {
//Creating object of class C
C obj;
return 0;
}

Output:

Constructor of A class
Constructor of B class
Constructor of C class

Multiple Inheritance

In multiple inheritance, a class can inherit more than one class. This means that in this type of inheritance a
single child class can have multiple parent classes.
For example:

C inherits A and B both

Example of Multiple Inheritance:


#include <iostream>
using namespace std;
class A {
public:
A(){
cout<<"Constructor of A class"<<endl;
}
};
class B {
public:
B(){
cout<<"Constructor of B class"<<endl;
}
};
class C: public A, public B {
public:
C(){
cout<<"Constructor of C class"<<endl;
}
};
int main() {
//Creating object of class C
C obj;
return 0;
}

Constructor of A class
Constructor of B class
Constructor of C class

4)Hierarchical Inheritance

In this type of inheritance, one parent class has more than one child class. For example:

Class B and C inherits class A

Example of Hierarchical inheritance:


#include <iostream>
using namespace std;
class A {
public:
A(){
cout<<"Constructor of A class"<<endl;
}
};
class B: public A {
public:
B(){
cout<<"Constructor of B class"<<endl;
}
};
class C: public A{
public:
C(){
cout<<"Constructor of C class"<<endl;
}
};
int main() {
//Creating object of class C
C obj;
return 0;
}

Output:

Constructor of A class
Constructor of C class

5) Hybrid Inheritance

Hybrid inheritance is a combination of more than one type of inheritance. For example, A child and parent
class relationship that follows multiple and hierarchical inheritance both can be called hybrid inheritance.

Polymorphism in C++
Polymorphism is a feature of OOPSthat allows the object to behave differently in different conditions. In
C++ we have two types of polymorphism:
1) Compile time Polymorphism – This is also known as static (or early) binding.
2) Runtime Polymorphism – This is also known as dynamic (or late) binding.

1) Compile time Polymorphism

Function overloading and Operator overloading are perfect example of Compile time polymorphism.

Compile time Polymorphism Example

In this example, we have two functions with same name but different number of arguments. Based on how
many parameters we pass during function call determines which function is to be called, this is why it is
considered as an example of polymorphism because in different conditions the output is different. Since,
the call is determined during compile time thats why it is called compile time polymorphism.

#include <iostream>
using namespace std;
class Add {
public:
int sum(int num1, int num2){
return num1+num2;
}
int sum(int num1, int num2, int num3){
return num1+num2+num3;
}
};
int main() {
Add obj;
//This will call the first function
cout<<"Output: "<<obj.sum(10, 20)<<endl;
//This will call the second function
cout<<"Output: "<<obj.sum(11, 22, 33);
return 0;
}

Output:

Output: 30
Output: 66
2) Runtime Polymorphism

Function overriding is an example of Runtime polymorphism.


Function Overriding: When child class declares a method, which is already present in the parent class
then this is called function overriding, here child class overrides the parent class.

In case of function overriding we have two definitions of the same function, one is parent class and one in
child class. The call to the function is determined at runtime to decide which definition of the function is to
be called, thats the reason it is called runtime polymorphism.

Example of Runtime Polymorphism

#include <iostream>
using namespace std;
class A {
public:
void disp(){
cout<<"Super Class Function"<<endl;
}
};
class B: public A{
public:
void disp(){
cout<<"Sub Class Function";
}
};
int main() {
//Parent class object
A obj;
obj.disp();
//Child class object
B obj2;
obj2.disp();
return 0;
}

Output:
Super Class Function
Sub Class Function

Function overloading in C++

Function overloading is a C++ programming feature that allows us to have more than one function having
same name but different parameter list, when I say parameter list, it means the data type and sequence of
the parameters, for example the parameters list of a function myfuncn(int a, float b) is (int,
float) which is different from the function myfuncn(float a, int b) parameter list (float,
int). Function overloading is a compile time polymorphism
Now that we know what is parameter list lets see the rules of overloading: we can have following functions
in the same scope.

sum(int num1, int num2)


sum(int num1, int num2, int num3)
sum(int num1, double num2)

 The easiest way to remember this rule is that the parameters should qualify any one or more of the
following conditions, they should have different type, number or sequence of parameters.

For example:
These two functions have different parameter type:

sum(int num1, int num2)


sum(double num1, double num2)

These two have different number of parameters:

sum(int num1, int num2)


sum(int num1, int num2, int num3)

These two have different sequence of parameters:

sum(int num1, double num2)


sum(double num1, int num2)
All of the above three cases are valid case of overloading. We can have any number of functions, just
remember that the parameter list should be different. For example:

int sum(int, int)


double sum(int, int)

This is not allowed as the parameter list is same. Even though they have different return types, its not valid.

Function overloading Example

Lets take an example to understand function overloading in C++.

#include <iostream>
using namespace std;
class Addition {
public:
int sum(int num1,int num2) {
return num1+num2;
}
int sum(int num1,int num2, int num3) {
return num1+num2+num3;
}
};
int main(void) {
Addition obj;
cout<<obj.sum(20, 15)<<endl;
cout<<obj.sum(81, 100, 10);
return 0;
}

Output:

35
191
Advantages of Function overloading

The main advantage of function overloading is to the improve the code readability and allows code
reusability. In the example 1, we have seen how we were able to have more than one function for the
same task(addition) with different parameters, this allowed us to add two integer numbers as well as three
integer numbers, if we wanted we could have some more functions with same name and four or five
arguments.
Imagine if we didn’t have function overloading, we either have the limitation to add only two integers or
we had to write different name functions for the same task addition, this would reduce the code readability
and reusability.

Function Overriding in C++

Function overriding is a feature that allows us to have a same function in child class which is already
present in the parent class. A child class inherits the data members and member functions of parent class,
but when you want to override a functionality in the child class then you can use function overriding. It is
like creating a new version of an old function, in the child class.

Function Overriding Example

To override a function you must have the same signature in child class. By signature I mean the data type
and sequence of parameters. Here we don’t have any parameter in the parent function so we didn’t use
any parameter in the child function.
#include <iostream>
using namespace std;
class BaseClass {
public:
void disp(){
cout<<"Function of Parent Class";
}
};
class DerivedClass: public BaseClass{
public:
void disp() {
cout<<"Function of Child Class";
}
};
int main() {
DerivedClass obj = DerivedClass();
obj.disp();
return 0;
}

Output:

Function of Child Class

 Note: In function overriding, the function in parent class is called the overridden function and
function in child class is called overriding function.

Difference between function overloading and function


overriding

Now that we understand what is function overloading and overriding in c++programming lets see the
difference between them:

1) Function Overloading happens in the same class when we declare same functions with different
arguments in the same class. Function Overriding is happens in the child class when child class overrides
parent class function.
2) In function overloading function signature should be different for all the overloaded functions. In
function overriding the signature of both the functions (overriding function and overridden function)
should be same.
3) Overloading happens at the compile time thats why it is also known as compile time polymorphism
while overriding happens at run time which is why it is known as run time polymorphism.
4) In function overloading we can have any number of overloaded functions. In function overriding we can
have only one overriding function in the child class.

Overloading in C++

If we create two or more member of the same class having the same name but different in number or type
of parameter,it is known as C++ overloading.

For example, we can overload an operator ‘+’ in a class like String so that we can concatenate two strings
by just using +.
Other example classes where arithmetic operators may be overloaded are Complex Number, Fractional
Number, Big Integer, etc.

A WordPress.com Website.

You might also like