text: #ifndef SHAPE_HPP
  #define SHAPE_HPP
  #include <iostream>
  #include <memory>
  #include <string>
  #include "Material.hpp"
  #include "Ray.hpp"
  #include "HitPoint.hpp"
  
  class Shape{
  
      protected:
          std::string name_;
          std::shared_ptr<Material> mat_ = std::make_shared<Material>();
  
      public:
          Shape();
          Shape(std::string name, std::shared_ptr<Material> mat);
          ~Shape();
          virtual float area() = 0;
          virtual float volume() = 0;
          virtual std::ostream& print(std::ostream& os)const;
          virtual HitPoint intersect(Ray const& ray) = 0;
  };
  
  std::ostream& operator<<(std::ostream& os, Shape const& s);
  
  #endif