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

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?