Are abstract methods and pure virtual functions the same thing?

C++FunctionVirtual

C++ Problem Overview


As far as I know, both abstract methods and pure virtual functions do NOT provide any functionality ... So can we say they're both the same thing ?

Also, suppose a class (not necessarily declared as abstract) contains a number of implemented methods (not abstract or virtual), but contains a pure virtual function. Is this class then abstract ?

C++ Solutions


Solution 1 - C++

Yes, they are the same thing. In C++, an abstract method is just another way of describing the characteristics of a pure virtual function. Both just mean a method with no implementation provided that needs to be implemented in a sub-class before the class can actually be instantiated.

The situation with pure virtual functions and abstract classes in C++ is similar as they essentially mean exactly the same thing. Any abstract class must have at least 1 pure virtual function or else it could be instantiated and wouldn't be abstract. Likewise, any class with at least 1 pure virtual function must be abstract because it needs to be extended so that method can actually be implemented.

Therefore, a class is abstract if and only if it contains at least 1 pure virtual function/abstract method.

Later on, languages like Java and C# made things like this more explicit, allowing a special keyword to define a class abstract rather than the presence of a pure-virtual function. C++ lets you do the same things as these languages, but they're just a little more explicit about it. :D

Solution 2 - C++

You don't explicitly declare classes or methods as abstract in C++. The presence of pure virtual methods is what makes them abstract.

Solution 3 - C++

Yes, abstract methods are the exact same thing as pure virtual functions; the terms are often used interchangeably. IMO, "Pure virtual function" is the C++ technically correct term which specifically denotes the fact that the function is set to 0:

class myClass {
public:
  virtual void vfunc() = 0; // pure specifier
};

An abstract class is defined by:

> a class that is designed to be > specifically used as a base class. An > abstract class contains at least one > pure virtual function.

So basically, an abstract class is an abstract class because it's designed to be a base class (some base classes by definition need to have implementable methods which will need to be pure virtual). These classes become abstract classes simply by how they are used and extended from. Unlike languages like Java, there is no abstract or interface keyword modifier so this is why we need a "verbal contract" to talk about abstract classes in C++.

Solution 4 - C++

In C++, a pure virtual member function leads to the enclosing type being an "abstract type".

Functions themselves cannot be abstract, though the term is frequently misused in this manner.

Solution 5 - C++

I would say yes, abstract methods and pure virtual functions are conceptually the same thing.

>Also, suppose a class (not necessarily declared as abstract) contains a number of implemented methods (not abstract or virtual), but contains a pure virtual function. Is this class then abstract ?

A class with at least 1 pure virtual function is called an abstract class.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAhmadView Question on Stackoverflow
Solution 1 - C++Gordon GustafsonView Answer on Stackoverflow
Solution 2 - C++JordãoView Answer on Stackoverflow
Solution 3 - C++David TitarencoView Answer on Stackoverflow
Solution 4 - C++Lightness Races in OrbitView Answer on Stackoverflow
Solution 5 - C++AkhilView Answer on Stackoverflow