温馨提示×

C++封装性支持接口继承吗

c++
小樊
82
2024-11-09 00:17:27
栏目: 编程语言

C++ 支持接口继承,但这种继承方式与其他编程语言中的接口继承有所不同。在 C++ 中,接口可以通过抽象类来实现。抽象类是一种特殊的类,它包含至少一个纯虚函数。纯虚函数是在基类中声明的虚函数,它在基类中没有定义,而是用= 0表示。派生类必须实现这些纯虚函数,否则它们也将成为抽象类。

以下是一个简单的 C++ 抽象类示例:

#include <iostream>

// 抽象类 Shape
class Shape {
public:
    // 虚析构函数,确保派生类的析构函数被正确调用
    virtual ~Shape() {}

    // 纯虚函数,计算面积
    virtual double area() const = 0;
};

// Circle 类继承自 Shape
class Circle : public Shape {
public:
    Circle(double radius) : radius_(radius) {}

    // 实现 area 函数
    double area() const override {
        return 3.14159 * radius_ * radius_;
    }

private:
    double radius_;
};

// Square 类继承自 Shape
class Square : public Shape {
public:
    Square(double side) : side_(side) {}

    // 实现 area 函数
    double area() const override {
        return side_ * side_;
    }

private:
    double side_;
};

int main() {
    // 由于 Shape 是抽象类,不能实例化对象
    // Shape shape; // 错误

    // 创建派生类对象
    Circle circle(5.0);
    Square square(4.0);

    // 调用 area 函数
    std::cout << "Circle area: " << circle.area() << std::endl;
    std::cout << "Square area: " << square.area() << std::endl;

    return 0;
}

在这个示例中,Shape 是一个抽象类,包含一个纯虚函数 area()CircleSquare 类继承自 Shape 并实现了 area() 函数。这样,我们可以通过 Shape 类型的指针或引用来调用派生类的 area() 函数,从而实现接口继承。

0