From b86d375f621d56abfc9858587ae5f73f9782da44 Mon Sep 17 00:00:00 2001 From: Butcher3Years Date: Fri, 9 Jan 2026 12:29:11 +0530 Subject: [PATCH 1/3] "Add virtual functions and dynamic binding with Entity-Player inheritance example" --- Virtual functions/Log.cpp | 50 ++++++++++++++++++++++++++++++++++++++ Virtual functions/main.cpp | 45 ++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 Virtual functions/Log.cpp create mode 100644 Virtual functions/main.cpp diff --git a/Virtual functions/Log.cpp b/Virtual functions/Log.cpp new file mode 100644 index 0000000..4bdae24 --- /dev/null +++ b/Virtual functions/Log.cpp @@ -0,0 +1,50 @@ +#include +#include + + class Entity + { + public : + virtual std::string GetName() { return "Entity"; }//getName is going to return string + + }; + + class Player : public Entity + { + private : + std::string m_Name;//stores a name + public : + Player(const std::string& name)//constructor allows to specify a name + : m_Name(name) {} + + std::string GetName() override { return m_Name; }//Mark the overriden function with keyword override and this helps the funtion came from the base class + }; + + void PrintName(Entity* entity) + { + std::cout << entity->GetName() << std::endl; + } + + +int main() +{ + + Entity* e = new Entity(); + PrintName(e); + //std::cout << e->GetName() <GetName() << std::endl; + + + //Entity* entity = p;//p is pointer to a player type but this is a instance in the player class + //std::cout << entity->GetName();//we expect player to be printed + + std::cin.get(); +} + +//v table contain a mapping for all the virtual functions in our base class so we can map it to correct overwritten function at runtime +//if i want to override a funtion you need to mark the base funtion in the base class as virtual +//virtual funtions need extra memory to store v table to dispatch to the right funtion includes member pointer in the base class +//and if we call virtual funtion we have to go through table to see which matches [additional performace penalty] ] \ No newline at end of file diff --git a/Virtual functions/main.cpp b/Virtual functions/main.cpp new file mode 100644 index 0000000..b33a416 --- /dev/null +++ b/Virtual functions/main.cpp @@ -0,0 +1,45 @@ +//binding means which functions to call +//if not virtual it is static binding : The compiler decides at compile time which function to call, based only on the type of the pointer/reference, not the actual object it points to. +//if it is virtual it is dynamic or runtime binding means the decision of which function to call happens at runtime, based on the actual type of the object. +//Made possible by virtual functions and the hidden vtable mechanism + +//virtual functions allows up to ovverride the methods in the sub classes +//if parent class has some virtual function then sub class can ovverride it to change the method + +#include +#include + + class Entity + { + public : + std::string GetName() { return "Entity"; }//getName is going to return string + + }; + + class Player : public Entity + { + private : + std::string m_Name;//stores a name + public : + Player(const std::string& name)//constructor allows to specify a name + : m_Name(name) {} + + std::string GetName() { return m_Name; }//return the name member + }; + + +int main() +{ + + Entity* e = new Entity(); + std::cout << e->GetName() <GetName() << std::endl; +//no need to bothering of objects as program terminates it anyway + + std::cin.get(); +} + +//everything goes bad whenever i start introduce polymorphism +//referring player like its not entity \ No newline at end of file From c891a23995a6f581c853fdc2a5c194385bddc0bd Mon Sep 17 00:00:00 2001 From: Butcher3Years Date: Fri, 9 Jan 2026 21:52:54 +0530 Subject: [PATCH 2/3] This is about Pure virtual funtions and so called interfaces in other languages --- Interfaces/main.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++ Interfaces/main.exe | Bin 0 -> 53063 bytes 2 files changed, 78 insertions(+) create mode 100644 Interfaces/main.cpp create mode 100644 Interfaces/main.exe diff --git a/Interfaces/main.cpp b/Interfaces/main.cpp new file mode 100644 index 0000000..b0b1fbd --- /dev/null +++ b/Interfaces/main.cpp @@ -0,0 +1,78 @@ +/*Pure virtual function in C++ is the key feature that lets you create interfaces (or abstract classes that behave like interfaces). +What is a Pure Virtual Function? +A pure virtual function is a virtual function that: + +Has = 0 at the end +Has no implementation in the base class (or sometimes just a dummy one) +Forces every derived (child) class to provide its own implementation +we cant instantiate the interface class [only sub classes we can and have to] +Interfaces are just classes in c++ with unimplemented methods acting as template of source unlike other languages as java or c#*/ + + +#include +#include + + class Printable + + { + public : + virtual std::string GetClassName() = 0;//now every class have to contain GetClassName function to implement + + }; + + class Entity : public Printable//made a sub class + { + public : + virtual std::string GetName() { return "Entity"; }//by removing body and equating to 0 makes a pure virtal funtion + std::string GetClassName() override { return "Entity"; } + + }; + + class Player : public Entity //no need of printable + { + private : + std::string m_Name; + public : + Player(const std::string& name) + : m_Name(name) {} + + std::string GetName() override { return m_Name; } + std::string GetClassName() override { return "Player"; } + }; + + void PrintName(Entity* entity) + { + std::cout << entity->GetName() << std::endl; + } + + class A : public Printable + { + public : + std::string GetClassName() override {return "A"; } + + }; + + + void Print(Printable* obj)//this is for printing names of class and type which has GetClassName funtion and make Printable a pointer +{ + std::cout << obj->GetClassName() << std::endl; +} +int main() +{ + + Entity* e = new Entity();//cant instantiate the Entity class if it is pure virtual funtion and we need to give a sub class where the funtion is implemented eg Player("") + // PrintName(e); + + + Player* p = new Player("Suhas"); + //PrintName(p); + + Print(e); + Print(p); + Print(new A());//it is a memory leak + + + + std::cin.get(); +} + //we can only instantiate the class if it actually has all those pure virtual functions implemented[all funtions implemented] \ No newline at end of file diff --git a/Interfaces/main.exe b/Interfaces/main.exe new file mode 100644 index 0000000000000000000000000000000000000000..cd09c06b6ec7c7fcf37182d1534ecf24676bead3 GIT binary patch literal 53063 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 NFQ%!!Gu&S0{~Is<<~RTV literal 0 HcmV?d00001 From a8c7e64dab82dd18e69912336581cb8a3e55b358 Mon Sep 17 00:00:00 2001 From: Butcher3Years Date: Fri, 9 Jan 2026 22:04:54 +0530 Subject: [PATCH 3/3] Add .gitignore to ignore exe files forever --- Visibility/.gitignore | Bin 0 -> 118 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Visibility/.gitignore diff --git a/Visibility/.gitignore b/Visibility/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..14419a10dce900ddf6a9a7cc91d43d8f80a073b8 GIT binary patch literal 118 zcmezWPm4j1A(f#5hf7(l#yh9rh8Bpyt>fFT7a1L7qylrm&8