qt、c++用基类描述不同物体的共有属性,用子类描述不同物体的不同属性,使用基类定义子类数据,并通过访问基类,获得派生类数据
时间: 2024-09-24 12:21:32 浏览: 47
C++课设作业:股票管理系统orz(使用Qt+MySQL).zip
5星 · 资源好评率100%
在Qt和C++中,使用面向对象的设计模式时,可以通过创建基类(Base Class)来描述所有类型的共享属性和行为,比如共同的功能或者状态。例如,你可以创建一个名为`Shape`的基类,它包含所有形状共有的属性,如颜色、大小等。然后,为了表示具体的形状种类,如`Circle`, `Square`, `Triangle`等,可以创建它们作为`Shape`的派生类(Derived Classes),并在这个过程中添加特有的属性,如圆的半径、正方形的边长或三角形的顶点。
在基类`Shape`中定义数据成员:
```cpp
class Shape {
public:
virtual ~Shape() {}
// 共享属性
QColor color;
int size;
protected:
// 构造函数和析构函数
Shape(QColor c, int s) : color(c), size(s) {}
};
```
对于每个派生类,如`Circle`,可以在继承`Shape`的基础上增加特有属性:
```cpp
class Circle : public Shape {
public:
// 圆的半径
qreal radius;
Circle(QColor c, int s, qreal r) : Shape(c, s), radius(r) {}
// ...其他圆的相关方法
};
```
当你需要操作一个形状时,可以使用基类指针或引用,从而间接访问所有派生类的数据,实现多态:
```cpp
void drawShape(Shape* shape) {
// 虽然shape是指向基类的,但我们能安全地绘制所有子类
shape->setColor(Qt::red); // 可以操作color,因为这是基类共享的属性
}
Circle circle(QColor red, int size, qreal radius);
drawShape(&circle); // 此处drawShape处理所有的Shape类型,包括Circle
```
阅读全文