打印
[新唐博主]

C++ 接口(抽象类)

[复制链接]
65|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2024-11-15 15:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在C++中,接口通常通过抽象类来实现。抽象类是一个包含至少一个纯虚函数的类,它不能被实例化,但可以作为其他类的基类,从而定义了一组接口方法,子类必须实现这些接口方法。接口(抽象类)的实现:抽象类通常用于定义一组接口方法,子类必须实现这些方法才能被实例化。在C++中,可以通过纯虚函数来实现抽象类。示例:#include <iostream>

// 抽象类 Shape
class Shape {
public:
    // 纯虚函数,定义接口
    virtual double area() const = 0;
    virtual void printInfo() const = 0;
};

// 子类 Circle
class Circle : public Shape {
private:
    double radius;

public:
    Circle(double r) : radius(r) {}

    double area() const override {
        return 3.14159 * radius * radius;
    }

    void printInfo() const override {
        std::cout << "Circle with radius " << radius << std::endl;
    }
};

// 子类 Rectangle
class Rectangle : public Shape {
private:
    double length;
    double width;

public:
    Rectangle(double l, double w) : length(l), width(w) {}

    double area() const override {
        return length * width;
    }

    void printInfo() const override {
        std::cout << "Rectangle with length " << length << " and width " << width << std::endl;
    }
};

int main() {
    Circle circle(5.0);
    Rectangle rectangle(4.0, 6.0);

    Shape* shapes[] = {&circle, &rectangle};

    for (const auto& shape : shapes) {
        shape->printInfo();
        std::cout << "Area: " << shape->area() << std::endl;
    }

    return 0;
}
在上面的示例中,Shape是一个抽象类,定义了两个纯虚函数area和printInfo作为接口。Circle和Rectangle是Shape的子类,必须实现area和printInfo方法才能被实例化。优点:「接口定义」:抽象类定义了一组接口方法,规范了子类的实现。「多态性」:通过抽象类,可以实现多态性,即不同子类对象可以通过统一的接口进行操作。「灵活性」:抽象类提供了一种灵活的设计方式,允许在不同子类中实现相同的接口方法,从而实现不同的行为。

使用特权

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

本版积分规则

1188

主题

5182

帖子

12

粉丝