
在 C++ 中,继承和组合是两种常见的面向对象设计技术,它们各自适用于不同的场景。理解何时使用继承和何时使用组合对于编写高效、可维护的代码非常重要。
继承是一种“is-a”关系,表示一个类(子类)是从另一个类(基类)派生而来的。子类可以继承基类的属性和方法,并且可以扩展或覆盖这些方法。
#include <iostream>
// 基类
class Animal {
public:
virtual void makeSound() const = 0; // 纯虚函数
};
// 派生类
class Dog : public Animal {
public:
void makeSound() const override {
std::cout << "Woof!" << std::endl;
}
};
class Cat : public Animal {
public:
void makeSound() const override {
std::cout << "Meow!" << std::endl;
}
};
int main() {
Animal* dog = new Dog();
Animal* cat = new Cat();
dog->makeSound(); // 输出: Woof!
cat->makeSound(); // 输出: Meow!
delete dog;
delete cat;
return 0;
}组合是一种“has-a”关系,表示一个类包含另一个类的对象作为其成员。组合通常用于实现更灵活的设计,因为可以通过修改成员对象来改变类的行为。
#include <iostream>
// 组件类
class Engine {
public:
void start() const {
std::cout << "Engine started." << std::endl;
}
};
// 组合类
class Car {
private:
Engine engine;
public:
void start() const {
engine.start();
}
};
int main() {
Car car;
car.start(); // 输出: Engine started.
return 0;
}原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。