{"pageProps":{"code":{"CMakeLists.txt":{"name":"CMakeLists.txt","content":"add_executable(code-explore code-explore.cpp)\n\nadd_executable(default default.cpp)\n\nadd_executable(slicing-reference slicing-reference.cpp)\n\nadd_executable(virtual virtual.cpp)\n","path":"code/6771/24T2/7.1/CMakeLists.txt","fileext":"txt"},"code-explore.cpp":{"name":"code-explore.cpp","content":"#include <string>\r\n#include <iostream>\r\n\r\nclass BaseClass {\r\n public:\r\n  int get_member() { return member_; }\r\n  std::string get_class_name() {\r\n    return \"BaseClass\";\r\n  };\r\n\r\n private:\r\n  int member_;\r\n};\r\n\r\nclass SubClass: public BaseClass {\r\n public:\r\n  std::string get_class_name() {\r\n    (void) subclass_data_;\r\n    return \"SubClass\";\r\n  }\r\n\r\n private:\r\n  int subclass_data_;\r\n};\r\n\r\nvoid print_class_name(BaseClass base) {\r\n  std::cout << base.get_class_name()\r\n            << ' ' << base.get_member()\r\n            << '\\n';\r\n}\r\n\r\nint main() {\r\n  BaseClass base_class;\r\n  SubClass subclass;\r\n  print_class_name(base_class);\r\n  print_class_name(subclass);\r\n}","path":"code/6771/24T2/7.1/code-explore.cpp","fileext":"cpp"},"default.cpp":{"name":"default.cpp","content":"#include <iostream>\r\n\r\nclass Base {\r\npublic:\r\n  virtual ~Base() = default;\r\n  virtual void print_num(int i = 1) {\r\n    std::cout << \"Base \" << i << '\\n';\r\n  }\r\n};\r\n\r\nclass Derived: public Base {\r\npublic:\r\n  void print_num(int i = 2) override {\r\n    std::cout << \"Derived \" << i << '\\n';\r\n  }\r\n};\r\n\r\nint main() {\r\n  Derived derived;\r\n  Base* base = &derived;\r\n  derived.print_num(); // Prints \"Derived 2\"\r\n  base->print_num(); // Prints \"Derived 1\"\r\n}","path":"code/6771/24T2/7.1/default.cpp","fileext":"cpp"},"slicing-reference.cpp":{"name":"slicing-reference.cpp","content":"#include <string>\r\n#include <iostream>\r\n\r\nclass BaseClass {\r\n public:\r\n  int get_member() { return member_; }\r\n  std::string get_class_name() {\r\n    return \"BaseClass\";\r\n  };\r\n\r\n private:\r\n  int member_;\r\n};\r\n\r\nclass SubClass: public BaseClass {\r\n public:\r\n  std::string get_class_name() {\r\n    (void) subclass_data_;\r\n    return \"SubClass\";\r\n  }\r\n\r\n private:\r\n  int subclass_data_;\r\n};\r\n\r\nvoid print_class_name(BaseClass& base) {\r\n  std::cout << base.get_class_name()\r\n            << ' ' << base.get_member()\r\n            << '\\n';\r\n}\r\n\r\nint main() {\r\n  BaseClass base_class;\r\n  SubClass subclass;\r\n  print_class_name(base_class);\r\n  print_class_name(subclass);\r\n}","path":"code/6771/24T2/7.1/slicing-reference.cpp","fileext":"cpp"},"virtual.cpp":{"name":"virtual.cpp","content":"#include <iostream>\r\n#include <string>\r\n\r\nclass BaseClass {\r\n public:\r\n  virtual std::string get_class_name() const {\r\n    return \"BaseClass\";\r\n  };\r\n\r\n  virtual ~BaseClass() {\r\n   std::cout << \"Destructing base class\\n\";\r\n }\r\n};\r\n\r\nclass SubClass: public BaseClass {\r\n public:\r\n  std::string get_class_name() const override {\r\n    return \"SubClass\";\r\n  }\r\n\r\n ~SubClass() {\r\n   std::cout << \"Destructing subclass\\n\";\r\n }\r\n};\r\n\r\nvoid print_stuff(const BaseClass& base_class) {\r\n  std::cout << base_class.get_class_name() << '\\n';\r\n}\r\n\r\nint main() {\r\n  auto subclass = static_cast<std::unique_ptr<BaseClass>>(\r\n    std::make_unique<SubClass>());\r\n  std::cout << subclass->get_class_name();\r\n}","path":"code/6771/24T2/7.1/virtual.cpp","fileext":"cpp"}}},"__N_SSG":true}