在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++代码。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |