Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
#include <iostream> #include <string> // Base class class Animal { public: explicit Animal(const std::string& name, int age) : name_(name), age_(age) { std::cout << "Animal constructed: " << name_ << " "; } // Virtual destructor — essential for polymorphic use virtual ~Animal() { std::cout << "Animal destroyed: " << name_ << " "; } std::string name() const { return name_; } int age() const { return age_; } virtual void speak() const { std::cout << name_ << " makes a sound. "; } protected: std::string name_; int age_; }; // Derived class class Dog : public Animal { public: Dog(const std::string& name, int age, const std::string& breed) : Animal(name, age) // call base constructor explicitly , breed_(breed) { std::cout << "Dog constructed: " << breed_ << " "; } ~Dog() override { std::cout << "Dog destroyed: " << name_ << " "; } void speak() const override { std::cout << name_ << " barks! "; } std::string breed() const { return breed_; } private: std::string breed_; }; int main() { Animal* a = new Dog("Rex", 3, "Labrador"); a->speak(); std::cout << "Breed: " << static_cast<Dog*>(a)->breed() << " "; delete a; // calls Dog::~Dog then Animal::~Animal (virtual) return 0; }
Result
Open