/** Simple Multiple Inheritance Example in C++17.
*
* This example demonstrates basic multiple inheritance concepts
* with clear, minimal code showing how a derived class can inherit
* from multiple base classes.
*
* @file Example2.cpp
* @version 1.0 @date 2026-02-13
*/
#include <iostream>
#include <string>
/** First base class - provides speaking capability.
*/
class Speaker {
public:
/** Make the object speak.
*/
void speak() {
std::cout << "I can speak!" << std::endl;
}
};
/** Second base class - provides walking capability.
*/
class Walker {
public:
/** Make the object walk.
*/
void walk() {
std::cout << "I can walk!" << std::endl;
}
};
/** Derived class using multiple inheritance.
* Inherits from both Speaker and Walker classes.
*/
class Person : public Speaker, public Walker {
private:
std::string name; /*!< Person's name. */
public:
/** Person constructor.
*
* @param name The person's name.
*/
Person(const std::string & name) : name(name) {}
/** Introduce the person.
*/
void introduce() {
std::cout << "Hello, I am " << name << ". ";
speak(); // From Speaker base class
walk(); // From Walker base class
}
};
/** Another example - Robot that can speak and walk.
*/
class Robot : public Speaker, public Walker {
private:
std::string model; /*!< Robot model. */
public:
/** Robot constructor.
*
* @param model The robot model.
*/
Robot(const std::string & model) : model(model) {}
/** Display robot capabilities.
*/
void showCapabilities() {
std::cout << "Robot " << model << " capabilities: ";
speak(); // From Speaker
walk(); // From Walker
}
};
/** Demonstrate multiple inheritance.
*
* @return Exit code.
*/
int main() {
std::cout << "=== Simple Multiple Inheritance Demo ===" << std::endl;
// Create a person
Person person("Alice");
std::cout << "\nPerson example:" << std::endl;
person.introduce();
// Create a robot
Robot robot("R2-D2");
std::cout << "\nRobot example:" << std::endl;
robot.showCapabilities();
// Demonstrate accessing base class methods directly
std::cout << "\nDirect base class access:" << std::endl;
person.speak(); // Call Speaker's method
robot.walk(); // Call Walker's method
std::cout << "\n=== Demo Complete ===" << std::endl;
return 0;
}