在Qt中自定义一个抽象类通常涉及定义一个基类,该类包含至少一个纯虚函数,从而使其成为抽象类。以下是一个简单的例子,展示了如何创建一个自定义的抽象类及其派生类。
首先,我们定义一个名为Shape
的抽象类,它有一个纯虚函数area()
,用于计算形状的面积。然后,我们创建两个派生类Circle
和Rectangle
,它们分别实现了area()
函数来计算圆和矩形的面积。
Shape.h
| #ifndef SHAPE_H |
| #define SHAPE_H |
| |
| class Shape { |
| public: |
| virtual ~Shape() {} |
| virtual double area() const = 0; // 纯虚函数,使得Shape成为抽象类 |
| }; |
| |
| #endif // SHAPE_H |
Circle.h
| #ifndef CIRCLE_H |
| #define CIRCLE_H |
| |
| #include "Shape.h" |
| |
| class Circle : public Shape { |
| public: |
| Circle(double radius); |
| double area() const override; // 重写Shape类中的纯虚函数 |
| private: |
| double radius; |
| }; |
| |
| #endif // CIRCLE_H |
Circle.cpp
| #include "Circle.h" |
| #include <cmath> |
| |
| Circle::Circle(double radius) : radius(radius) {} |
| |
| double Circle::area() const { |
| return M_PI * radius * radius; |
| } |
Rectangle.h
| #ifndef RECTANGLE_H |
| #define RECTANGLE_H |
| |
| #include "Shape.h" |
| |
| class Rectangle : public Shape { |
| public: |
| Rectangle(double width, double height); |
| double area() const override; // 重写Shape类中的纯虚函数 |
| private: |
| double width, height; |
| }; |
| |
| #endif // RECTANGLE_H |
Rectangle.cpp
| #include "Rectangle.h" |
| |
| Rectangle::Rectangle(double width, double height) : width(width), height(height) {} |
| |
| double Rectangle::area() const { |
| return width * height; |
| } |
在这个例子中,Shape
是一个抽象类,因为它有一个纯虚函数area()
。Circle
和Rectangle
类都继承自Shape
,并且都实现了area()
函数,因此它们可以被实例化。你可以在主函数中创建Circle
和Rectangle
的对象,并调用它们的area()
函数来计算面积。
main.cpp
| #include <iostream> |
| #include "Circle.h" |
| #include "Rectangle.h" |
| |
| int main() { |
| Circle circle(5.0); // 创建一个半径为5的圆 |
| std::cout << "Circle area: " << circle.area() << std::endl; // 输出圆的面积 |
| |
| Rectangle rectangle(4.0, 6.0); // 创建一个4x6的矩形 |
| std::cout << "Rectangle area: " << rectangle.area() << std::endl; // 输出矩形的面积 |
| |
| return 0; |
| } |
这个简单的例子展示了如何在Qt(或任何C++环境)中定义和使用自定义的抽象类。请注意,虽然这个例子是在Qt环境中描述的,但它实际上并不依赖于Qt库,而是纯粹的C++代码。