C++类的组合和类的继承的区别

C++类的组合和类的继承的区别

类的组合:

类的组合是一种将一个类的对象作为另一个类的成员变量的设计方式。

class Engine {
public:
    Engine() { /* ... */ }
    ~Engine() { /* ... */ }
};

class Car {
private:
    Engine engine; // Engine的构造函数和析构函数将被调用
public:
    Car() {
        // Engine的构造函数在此处被调用
    }
    ~Car() {
        // 当Car对象销毁时,Engine的析构函数首先被调用
    }
};

类的继承:

类的继承的子类是派生类,可以拥有父类的全部属性。

#include <iostream>
#include <string>

// 基类:Animal
class Animal {
protected:
    std::string name;

public:
    // 基类的构造函数
    Animal(const std::string& animalName) : name(animalName) {}

    // 基类的虚析构函数
    virtual ~Animal() {
        std::cout << name << " is being destroyed." << std::endl;
    }

    // 一个简单的打印信息的成员函数
    virtual void speak() const {
        std::cout << name << " makes a sound." << std::endl;
    }
};

// 子类:Dog,继承自 Animal
class Dog : public Animal {
private:
    std::string breed;

public:
    // Dog类的构造函数
    Dog(const std::string& dogName, const std::string& dogBreed)
        : Animal(dogName), breed(dogBreed) {}

    // 重写基类的 speak 函数
    void speak() const override {
        std::cout << name << " barks." << std::endl;
    }

    // Dog类特有的成员函数
    void showBreed() const {
        std::cout << name << " is a " << breed << "." << std::endl;
    }
};

int main() {
    Dog myDog("Buddy", "Golden Retriever");

    // 访问Dog类特有的函数
    myDog.showBreed();

    // 访问从Animal类继承来的speak函数
    myDog.speak();

    return 0;
}
posted @ 2024-08-01 20:02  周半仙  阅读(30)  评论(0)    收藏  举报