    #include <iostream>
    
    struct Animal {
        const char* say() { return "???"; }
    };

    struct Fox : public Animal {
        const char* say() { return "A ring ding ding"; }
    };

    struct Cat : public Animal {
        const char* say() { return "Meow"; }
    };

    void whatDoesItSay(const char* name, Animal* animal) {
        std::cout << "The " << name << " says " << animal->say() << ".\n";
    }

    int main() {
        Cat cat;
        Fox fox;
        whatDoesItSay("cat", &cat);
        whatDoesItSay("fox", &fox);
    }
