воскресенье, 13 июля 2025 г.

Динамический полиморфизм vs Статический полиморфизм

Динамический полиморфизм
 #include <iostream>  
   
 class IStream {  
 public:  
   virtual ~IStream() = default;  
   virtual void foo() = 0;  
 };  
   
 class Stream : public IStream {  
 public:  
   void foo() override {  
     std::cout << "Stream::foo" << std::endl;  
   }  
 };  
   
 int main() {  
   IStream* stream = new Stream;  
   stream->foo();  
     
   return 0;   
 }  
Статический полиморфизм
 #include <iostream>  
   
 template<typename Stream>  
 class IStream : public Stream {  
 public:  
   inline void foo() {  
     return static_cast<Stream*>(this)->foo();  
   }  
 };   
   
 class Stream {  
 private:  
   friend class IStream<Stream>;  
     
   inline void foo() {  
     std::cout << "Stream::foo" << std::endl;  
   }  
 };  
     
 int main() {  
   IStream<Stream> stream;  
   stream.foo();  
   
   return 0;   
 }  

Комментариев нет:

Отправить комментарий