C++:多态

文摘   2024-08-14 07:31   内蒙古  

多态(Polymorphism)是面向对象编程中一个重要的概念,它允许不同的对象对同一消息作出不同的响应。在C++中,多态性主要通过虚函数和纯虚函数实现。

1. 虚函数(Virtual Functions):

虚函数是在基类中声明为虚函数的函数,可以在派生类中重写。当使用基类指针或引用调用虚函数时,根据指针或引用所指向的对象的实际类型,决定调用哪个版本的函数。

示例:

#include <iostream>

class Shape {
public:
    virtual void draw() {
        std::cout << "Drawing shape" << std::endl;
    }
};

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing circle" << std::endl;
    }
};

class Rectangle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing rectangle" << std::endl;
    }
};

int main() {
    Shape* shape1 = new Circle();
    Shape* shape2 = new Rectangle();

    shape1->draw(); // 调用Circle类的draw函数
    shape2->draw(); // 调用Rectangle类的draw函数

    delete shape1;
    delete shape2;

    return 0;
}

在上面的示例中,Shape类有一个虚函数draw,并且CircleRectangle类分别重写了这个函数。通过使用基类指针调用draw函数,根据指针所指向的对象的实际类型,确定调用哪个版本的draw函数。

2. 纯虚函数和抽象类(Pure Virtual Functions and Abstract Classes):

纯虚函数是在基类中声明为纯虚函数的虚函数,没有实现,派生类必须实现它们。包含至少一个纯虚函数的类被称为抽象类,不能实例化抽象类的对象。

示例:

#include <iostream>

class Shape {
public:
    virtual void draw() 0// 纯虚函数
};

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing circle" << std::endl;
    }
};

class Rectangle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing rectangle" << std::endl;
    }
};

int main() {
    // Shape* shape = new Shape(); // 错误,无法实例化抽象类

    Shape* shape1 = new Circle();
    Shape* shape2 = new Rectangle();

    shape1->draw(); // 调用Circle类的draw函数
    shape2->draw(); // 调用Rectangle类的draw函数

    delete shape1;
    delete shape2;

    return 0;
}

在上面的示例中,Shape类包含一个纯虚函数draw,因此它是一个抽象类,不能被实例化。CircleRectangle类继承自Shape类并实现了draw函数。


兄弟嵌入式
从入门到精通,学习并分享嵌入式软、硬件的知识。
 最新文章