面试题答案
一键面试-
思路:
- 采用组合(Composition)和委托(Delegation)的方式来实现代码复用,而不是多重继承。
- 创建一个接口类来定义飞行相关的行为,
Bird
类和FlyingMammal
类都实现这个接口。 FlyingMammal
类组合一个实现飞行接口的对象,并将飞行相关的操作委托给这个对象。
-
关键代码片段:
// 定义飞行接口
class Flyable {
public:
virtual void fly() = 0;
};
// 基类Animal
class Animal {
public:
// 基类成员和方法
virtual void breathe() {
std::cout << "Animal is breathing." << std::endl;
}
};
// Mammal类继承自Animal
class Mammal : public Animal {
public:
// Mammal类成员和方法
void nurse() {
std::cout << "Mammal is nursing." << std::endl;
}
};
// Bird类继承自Animal并实现Flyable接口
class Bird : public Animal, public Flyable {
public:
void fly() override {
std::cout << "Bird is flying." << std::endl;
}
};
// 专门用于飞行能力的类,实现Flyable接口
class FlyingAbility : public Flyable {
public:
void fly() override {
std::cout << "Using flying ability." << std::endl;
}
};
// FlyingMammal类继承自Mammal,并组合一个FlyingAbility对象
class FlyingMammal : public Mammal {
private:
FlyingAbility flyingObj;
public:
// 将飞行操作委托给flyingObj
void fly() {
flyingObj.fly();
}
};
在上述代码中,FlyingMammal
类通过组合FlyingAbility
对象获得了飞行能力,同时继承自Mammal
类获得了哺乳动物的特性,避免了多重继承带来的菱形继承等问题。