52继承与组合

简介: 52继承与组合

C++入门——60s从0到1

继承与组合

 

在C++中,继承和组合都是实现代码重用的常见技术。它们可以帮助我们避免重复编写代码,提高代码的复用性和可维护性。

 

继承

 

继承是一种机制,它允许我们定义一个新的类(称为派生类),该类继承自一个现有的类(称为基类)。派生类可以访问基类的成员,包括属性和方法。继承可以让我们在已有的类的基础上构建新的类,而不需要从头开始编写。

 

继承通常用于表示“是一个”关系,即派生类是基类的一种特定类型。例如,如果我们有一个名为 `Animal` 的基类,那么我们可以创建一个名为 `Cat` 的派生类,表示猫是一种动物。

 

#include <iostream>
using namespace std;
 
class Animal {
public:
    void eat() {
        cout << "Animal is eating." << endl;
    }
};
 
class Cat : public Animal {
public:
    void meow() {
        cout << "Meow!" << endl;
    }
};
 
int main() {
    Animal* animal = new Cat();  // 基类指针指向派生类对象
    animal->eat();  // 调用 Animal::eat()
    animal->meow();  // 调用 Cat::meow()
    delete animal;
    return 0;
}

 

在上面的例子中,我们创建了一个 `Cat` 类型的对象,并通过基类指针将其赋值给 `Animal` 类型的指针 `animal`。然后,我们通过 `animal` 调用了 `eat()` 和 `meow()` 函数。需要注意的是,虽然 `animal` 是基类的指针,但是它指向的是一个派生类的对象,所以它可以调用基类和派生类的成员函数。

 

继承的优点是可以减少代码的重复性,同时也可以提高代码的可维护性。但是需要注意的是,过度使用继承可能会导致代码的复杂性增加,因为派生类会继承基类的所有成员,包括一些可能不需要的成员。这可能会导致代码冗余和不必要的开销。

 

组合

 

组合是一种机制,它允许我们将一个类的对象作为一个整体包含在另一个类的对象中。组合通常用于表示“有”关系,即一个对象包含另一个对象。例如,如果我们有一个名为 `Car` 的类,那么我们可以将一个名为 `Engine` 的类作为 `Car` 的一部分来包含进来。

 

#include <iostream>
using namespace std;
 
class Engine {
public:
    void run() {
        cout << "Engine is running." << endl;
    }
};
 
class Car {
public:
    Engine* engine;  // 包含一个 Engine 的指针
    Car(Engine& engine) : engine(&engine) {}  // 将 Engine 的引用传递给 Car 的构造函数
    void drive() {
        engine->run();  // 调用 Engine::run()
    }
};
 
int main() {
    Engine engine;  // 创建一个 Engine 对象
    Car car(engine);  // 将 Engine 的引用传递给 Car 的构造函数
    car.drive();  // 调用 Car::drive() 和 Engine::run()
    return 0;
}

在上面的例子中,我们创建了一个 `Engine` 类型的对象和一个 `Car` 类型的对象。然后我们将 `Engine` 的引用传递给了 `Car` 的构造函数,这样就可以在 `Car` 中使用 `Engine` 的成员函数了。通过这种方式,我们可以将多个独立的类组合成一个更复杂的对象。组合的优点是可以提高代码的可维护性和可扩展性,因为它可以将相关的功能组织在一起,并减少代码的重复性。但是需要注意的是,组合可能会导致对象之间的依赖关系变得更加复杂,因此需要谨慎使用。

目录
相关文章
|
4天前
|
C++
4. C++类的组合
4. C++类的组合
32 0
|
9月前
|
C++
C++类的组合
C++类的组合
|
8月前
2.【类的组合(在一个类中定义一个类)】
2.【类的组合(在一个类中定义一个类)】
17 0
|
9月前
|
算法 C语言 C++
C++类的组合练习
C++类的组合练习
接口vs抽象类、继承vs组合,他们之间有啥关系
接口vs抽象类、继承vs组合,他们之间有啥关系
C++学习——继承与派生
C++学习——继承与派生
116 0
C++学习——继承与派生
|
程序员
组合、继承、内部类什么时候用,该怎么设计?
组合、继承、内部类什么时候用,该怎么设计?
118 0
组合、继承、内部类什么时候用,该怎么设计?
#掌握如何创建类和对象,以及属性和函数的分类 #object是所有类最终都会继承的类,如果没有合适的继承类就使用他
#掌握如何创建类和对象,以及属性和函数的分类 #object是所有类最终都会继承的类,如果没有合适的继承类就使用他