#include <iostream>
#include <string>
#include <memory>

class Animal { // Capital letter class name
public:
    virtual std::string speak() const = 0; // Pure virtual function
    virtual ~Animal() = default;          // Virtual destructor
};

class Dog : public Animal {
public:
    std::string speak() const override {  // Added `const` to match base class
        return "bow bow";
    }
};

class Cat : public Animal {
public:
    std::string speak() const override {  // Added `const` to match base class
        return "meuw";
    }
};

class AnimalFactory {
public:
    static std::unique_ptr<Animal> getAnimal(const std::string& animalType) {
        if (animalType == "Dog") {
            return std::make_unique<Dog>();
        } else if (animalType == "Cat") {
            return std::make_unique<Cat>();
        } else {
            return nullptr; // Return nullptr for invalid animal type
        }
    }
};

int main() {
    auto out = AnimalFactory::getAnimal("Dog");

    if (out) { // Check if `getAnimal` returned a valid object
        std::cout << out->speak() << std::endl; // Output: bow bow
    } else {
        std::cout << "Failed to create animal." << std::endl;
    }

    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: