打印
[新唐博主]

C++:多态

[复制链接]
59|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2024-11-15 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
多态(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,并且Circle和Rectangle类分别重写了这个函数。通过使用基类指针调用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,因此它是一个抽象类,不能被实例化。Circle和Rectangle类继承自Shape类并实现了draw函数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1188

主题

5182

帖子

12

粉丝