A derived class can provide its own version of a method from the base class.

Overriding Methods

overriding_methods.cpp
#include <iostream>
#include <string>

class Greeter {
public:
    virtual std::string message(std::string name) {
        return "Hello, " + name;
    }
};

class ExcitedGreeter : public Greeter {
public:
    std::string message(std::string name) override {
        return "Hello, " + name + "!";
    }
};

int main() {
    std::string name = ;

    Greeter plain;
    ExcitedGreeter excited;

    std::cout << "plain=" << plain.message(name) << std::endl;
    std::cout << "excited=" << excited.message(name) << std::endl;
    return 0;
}
#include <iostream>
#include <string>

class Greeter {
public:
    virtual std::string message(std::string name) {
        return "Hello, " + name;
    }
};

class ExcitedGreeter : public Greeter {
public:
    std::string message(std::string name) override {
        return "Hello, " + name + "!";
    }
};

int main() {
    std::string name = ;

    Greeter plain;
    ExcitedGreeter excited;

    std::cout << "plain=" << plain.message(name) << std::endl;
    std::cout << "excited=" << excited.message(name) << std::endl;
    return 0;
}
#include <iostream>
#include <string>

class Greeter {
public:
    virtual std::string message(std::string name) {
        return "Hello, " + name;
    }
};

class ExcitedGreeter : public Greeter {
public:
    std::string message(std::string name) override {
        return "Hello, " + name + "!";
    }
};

int main() {
    std::string name = ;

    Greeter plain;
    ExcitedGreeter excited;

    std::cout << "plain=" << plain.message(name) << std::endl;
    std::cout << "excited=" << excited.message(name) << std::endl;
    return 0;
}
overriding An overriding method has the same name and compatible parameters as the base class method.