Syntax For Pure Virtual Function Is Code Example
Example 1: pure virtual function in c++
#include <iostream> #include <string> //Pure virtual function or inteface allows us to define a function in a base class that doesn't have an implementation or definition in the base class and force sub classes to implement that function //Pure virtual function is also called an interface in other languages class Entity { public: //virtual std::string GetName() { return "Entity"; }//This is a function that is just virtual .Overriding this function in sub class is optional we can instantiate subcllass without overriding or implementing this function //Below is an example a Pure Virtual Function //It is an unimplemented function ant it forces the sub class to implement it and define it //You will not be able to instantiate sub class without implementing or defining the function in sub class virtual std::string GetName() = 0; //the pure virtual function must have virtual written at the beginning and =0 at the end //This function cannot contain any definition in base class,it is just a declaration }; class Player :public Entity { std::string m_name; public: Player(const std::string& name) :m_name(name) {}; void Print() { std::cout << "This is Sub class" << std::endl; }; std::string GetName()override { return m_name; };//Pure virtual functions is implemented here in this sub class }; void PrintName(Entity* entity) { std::cout << entity->GetName() << std::endl; } int main() { //Entity a;//We can't do this because class Entity contains function that is unimplemented Player x("Jacob");//This will work because we have implemented or defined the function in this sub class std::cin.get(); }
Example 2: abstract class in c++
struct Abstract { virtual void f() = 0; // pure virtual }; // "Abstract" is abstract struct Concrete : Abstract { void f() override {} // non-pure virtual virtual void g(); // non-pure virtual }; // "Concrete" is non-abstract struct Abstract2 : Concrete { void g() override = 0; // pure virtual overrider }; // "Abstract2" is abstract int main() { // Abstract a; // Error: abstract class Concrete b; // OK Abstract& a = b; // OK to reference abstract base a.f(); // virtual dispatch to Concrete::f() // Abstract2 a2; // Error: abstract class (final overrider of g() is pure) }
Comments
Post a Comment