diff --git a/lectures/25_inheritance/students/student_test2.cpp b/lectures/25_inheritance/students/student_test2.cpp index f5ca964..6b7c327 100644 --- a/lectures/25_inheritance/students/student_test2.cpp +++ b/lectures/25_inheritance/students/student_test2.cpp @@ -21,6 +21,12 @@ public: class Student : public Human { public: + /* in C++, when a derived class inherits from a base class, + * the base class's constructor must be called to initialize its members. + * This is because the base class may contain private or protected members + * that are not directly accessible by the derived class. + * Therefore, the derived class relies on the base class's constructor to properly initialize these members. */ + Student(std::string n, int a, int s) : Human(n, a, s) {} }; diff --git a/lectures/25_inheritance/students/student_test4.cpp b/lectures/25_inheritance/students/student_test4.cpp new file mode 100644 index 0000000..f5d9f71 --- /dev/null +++ b/lectures/25_inheritance/students/student_test4.cpp @@ -0,0 +1,63 @@ +#include +#include + +class Human { +// change this to protect so that these variables can be accessed by the derived class. +protected: + std::string name; + int age; + int sleep_hours; + +public: + Human(std::string n, int a, int s) : name(n), age(a), sleep_hours(s) {} + ~Human(){ + std::cout << "Human Destructor" << std::endl; + } + + void introduce() { + std::cout << "Hello, I am " << name << ", and I am " << age << " years old.\n"; + } + + void sleep() { + std::cout << name << " is " << age << " years old who sleeps " << sleep_hours << " hours a night.\n"; + } +}; + +class Student : public Human { +public: + Student(std::string n, int a, int s) : Human(n, a, s) {} + ~Student(){ + std::cout << "Student Destructor" << std::endl; + } + + void introduce() { + std::cout << "Hello, I am " << name << ", and I am " << age << " years old. I’m majoring in 'How did I get here?' with a minor in 'It sounded easier when I signed up.'\n"; + } + + void sleep() { + std::cout << name << " is a college student who sleeps " << sleep_hours << " hours a night, and sleep 2 hours during boring lectures.\n"; + } +}; + +int main() { + // Creating instances of each class with member variables + Human h("Alice", 30, 8); + Student s("Bob", 20, 5); + + // Introducing Humans + std::cout << "--- Human introducing ---\n"; + h.introduce(); // Output: Hello, I am Alice, and I am 30 years old. + + std::cout << "--- Student introducing ---\n"; + s.introduce(); // Output: I am a student. My name is Bob, and I am 20 years old. + + // Showing sleep behavior + std::cout << "--- Human sleep ---\n"; + h.sleep(); // Output: Alice is 30 years old and sleeps 8 hours a night. + + std::cout << "--- Student sleep ---\n"; + s.sleep(); // Output: Bob is a student, and they sleep 5 hours a night. + + return 0; +} +