• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to secondary sidebar

GoHired

Interview Questions asked in Google, Microsoft, Amazon

Join WeekEnd Online Batch from 4-April-2020 on How to Crack Coding Interview in Just 10 Weeks : Fees just 20,000 INR

  • Home
  • Best Java Books
  • Algorithm
  • Internship
  • Certificates
  • About Us
  • Contact Us
  • Privacy Policy
  • Array
  • Stack
  • Queue
  • LinkedList
  • DP
  • Strings
  • Tree
  • Mathametical
  • Puzzles
  • Graph

C++ OOPs Part2

November 5, 2014 by Dhaval Dave

Polymorphism & Overloading

Polymorphism 

Polymorphism occurs when there is a hierarchy of classes and they are related by inheritance.

C++ polymorphism means that a call to a member function will cause a different function to be executed depending on the type of object that invokes the function.

Static linkage or Early binding or Compile Time Polymorphism

Consider the following example where a base class has been derived by other two classes:

class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width
= a;
height
= b;
}
int area()
{
cout
<< "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape{
public:
Rectangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout
<< "Rectangle class area :" <<endl;
return (width * height);
}
};
class Triangle: public Shape{
public:
Triangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout
<< "Triangle class area :" <<endl;
return (width * height / 2);
}
};
// Main function for the program
int main( )
{
Shape *shape;
Rectangle rec(10,7);
Triangle tri(10,5);

// store the address of Rectangle
shape
= &rec;
// call rectangle area.
shape
->area();

// store the address of Triangle
shape
= &tri;
// call triangle area.
shape
->area();

return 0;
}

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

Parent class area
Parent class area

The reason for the incorrect output is that the call of the function area() is being set once by the compiler as the version defined in the base class. This is called static resolution of the function call, or static linkage – the function call is fixed before the program is executed. This is also sometimes called early binding because the area() function is set during the compilation of the program.

Dynamic linkage or Late binding or Run time Polymorphism.

But now, let’s make a slight modification in our program and precede the declaration of area() in the Shape class with the keyword virtual so that it looks like this:

virtual int area()
{
cout
<< "Parent class area :" <<endl;
return 0;
}

After this slight modification, when the previous example code is compiled and executed, it produces the following result:

Rectangle class area
Triangle class area

Virtual Function

A virtual function is a function in a base class that is declared using the keyword virtual. Defining in a base class a virtual function, with another version in a derived class, signals to the compiler that we don’t want static linkage for this function.<br /> <br /> What we do want is the selection of the function to be called at any given point in the program to be based on the kind of object for which it is called. This sort of operation is referred to as dynamic linkage, or late binding.<br /> <br /> <h3 style=” left=”” text-align:=””> Pure Virtual Functions:

It’s possible that you’d want to include a virtual function in a base class so that it may be redefined in a derived class to suit the objects of that class, but that there is no meaningful definition you could give for the function in the base class.

We can change the virtual function area() in the base class to the following:

 // pure virtual function
virtual int area() = 0;

as

Overloading (Operator and Function)

Function overloading in C++:
You can have multiple definitions for the same function name in the same scope. The definition of the function must differ from each other by the types and/or the number of arguments in the argument list. You can not overload function declarations that differ only by return type.
class printData 
{
public:
void print(int i) {
cout
<< "Printing int: " << i << endl;
}

void print(double f) {
cout
<< "Printing float: " << f << endl;
}

void print(char* c) {
cout
<< "Printing character: " << c << endl;
}
};

int main(void)
{
printData pd
;

// Call print to print integer
pd
.print(5);
// Call print to print float
pd
.print(500.263);
// Call print to print character
pd
.print("Hello C++");

return 0;
}

Overloaded operators are functions with special names the keyword operator followed by the symbol for the operator being defined. Like any other function, an overloaded operator has a return type and a parameter list.

Box operator+(const Box&);
Box operator+(const Box&, const Box&);

as

Similar Articles

Filed Under: problem Tagged With: c

Reader Interactions

Primary Sidebar

Join WeekEnd Online/Offline Batch from 4-April-2020 on How to Crack Coding Interview in Just 10 Weeks : Fees just 20,000 INR

Join WeekEnd Online/Offline Batch from 4-April-2020

WhatsApp us

Secondary Sidebar

Custom Search

  • How I cracked AMAZON
  • LeetCode
  • Adobe
  • Amazon
  • Facebook
  • Microsoft
  • Hacker Earth
  • CSE Interview

Top Rated Questions

Python Array String

Amazon Interview On-Campus For Internship – 1

Check if an array has duplicate numbers in O(n) time and O(1) space

Serialise Deserialise N-ary Tree

Right view of Binary tree

Find min element in Sorted Rotated Array (With Duplicates)

Possible sizes of bus to carry n groups of friends

Skiing on Mountains Matrix

Implement LRU Cache

Advanced SQL Injection

The Magic HackerEarth Nirvana solutions Hiring Challenge

simple sql injection

Maximum difference between two elements s.t larger element appears after the smaller number

Binary Tree in Java

LeetCode: Container With Most Water

SAP Off Campus Hiring_ March 2015 Computer Skills

Handle duplicates in Binary Search Tree

CodeChef Code SGARDEN

Circular Linked List

Find two non repeating elements in an array of repeating elements

Get K Max and Delete K Max in stream of incoming integers

Word Break Problem

Length of the longest substring without repeating characters

Find the smallest window in a string containing all characters of another string

Add Sub Multiply very large number stored as string

Naurki.com Security Breach

K’th Largest Element in BST when modification to BST is not allowed

Binary Tree Isomorphic to each other

Flipkart SDET Interview Experience

C++ OOPs Part1

Copyright © 2025 · Genesis Framework · WordPress · Log in