Skip to main content

Abstract class

 If we can not create any objects of a class, then it is called an abstract class. A class is made abstract by adding at least one pure virtual function to it.

Pure virtual function

A function is said to be a pure virtual function, if it has no definition but has only declaration.

Pure virtual function is defined with the keyword virtual and followed by return type, function name and "=0".

class Shape
{
public:
 virtual void printarea()=0;
};
int main()
{
 Shape obj1;//error
}

Here printarea() function of Shape class is a pure virtual function as it has no body.

To make a function as pure virtual function, you should use =0 at the end of virtual function declaration

Abstract class

When a class has at least one pure virtual function, it is incomplete and no objects can be created from that class. Such a class is called an abstract class.

In the earlier example class Shape is an abstract class, and objects can not be created from that class. And the code  produces compiler error.

Abstract classes are used to enforce some interfaces on their derived classes

Any derived class of abstract class MUST define pure virtual function/s. If not, these derived class also becomes abstract classes.

Let us derive two classes from our previous abstract class A.


class Shape
{
public:
 virtual void printarea()=0;
};
class Circle:public Shape
  {
public:
 void printarea()
 {
 cout<<"area of a circle is pi*r*r";
 }
};
class Rectangle:public Shape
{};
int main()
{
 Shape obj1;//error
 Circle obj2;//valid
 Shape *ptr;/*valid. Object of A is not created*/
 ptr = new Circle;//OK
 Rectangle obj3;//error
}

In the example, Shape is an abstract class. It has two sub-classes - Circle and Rectangle. Circle has defined the pure virtual function print(). But Rectangle class has not. Which means that Circle is a normal class, but Rectangle is an abstract class. And we can see that creating an object of Shape and Rectangle will produce syntax error.

Also note that, in the code above, Shape obj1 produces error, but not Shape *ptr. Because by defining ptr as a pointer of class Shape, we have not yet created any object. And ptr may point to any of the  derived classes of Shape, which might be non-abstract.  

Do you like to read these notes in an offline app? Download my Simplified C++ app. You can even try visiting my other apps at Hegdeapps


Comments

Popular posts from this blog

Operator Overloading

What is operator overloading ? Operator overloading is the process of customizing C++ operators for operands of user defined types.   When you have two objects of a class- num1 and num2 , you can write a function to add them such as  ans = add(num1,num2); That does not look neither simple nor intuitive. You would prefer to write      ans = num1+num2; as you would write expressions for basic data types like integers, floats etc.    This can be done using Operator overloading. Operator overloading lets you write such statements. That is, it lets you call your functions on objects using  +, - ,* etc.    + operator will call addition function on the object (when you write op. overloading function for +). * will call multiply on objects etc. Names of overloaded operator functions start with keyword operator followed by  symbol of the operator. e.g. +, - etc. Unary operator functions take 0 parameters fo...

Your first program

C++ is an object oriented programming language based on C language. C++ was invented by Bjarne Stroustrup in the year 1979.​ Initially Stroustrup called the language as C with classes because it had object oriented features. C++ is a compiled language and is oriented towards systems programming and embedded systems.​ Instead of talking about history of C++, let us write our first C++ program. #include<iostream> using namespace std; int main () { cout << "Hello world" << endl; return 0 ; } main function ​ C++ program must have a main function - which indicates the starting point of the program. Execution of the program begins with main function. ​ int main() - A function can return a value. If it does not return a value, the function is specified as void function. The type of the return value is specified before the function name. In this case main function returns an integer value - it returns 0 to indicate success. Please re...

Find the error in C++ program

This C++ program is not compiling. What do you think is the error with the program? #include<iostream> using namespace std; int main() {    int arr[10];    arr={1,2,3,4,5,6,7,8};    cout<<"arr[0]="<<arr[0];    return 0; } Is the error due to Not using printf Initialising the array with only 8 elements instead of 10 Initialising array in the next statement instead of in definition. None of the above  Now if you like this question, there are plenty more questions like this and programs and notes in my app Simplified C++. Download the Simplif ied C++   by Hegdeapps now By the way the correct answer is (3)