用c++编写程序:4、计算三角形,正方形,圆形面积、周长。要求: (1)设计基类shape,并定义area(),cir()两个纯虚函数。 (2)设计三个派生类:直角三角形,正方形,圆形。 (3)在主函数中,利用基类指针,进行派生类成员函数的调用,实现动态联编。
时间: 2024-09-30 22:03:11 浏览: 60
在C++中,你可以按照以下步骤创建这个程序:
首先,我们定义一个名为`Shape`的基础类,包含两个纯虚函数(即未提供实现的方法):`virtual double area()` 和 `virtual double cir()`, 这些函数用于计算形状的面积和周长:
```cpp
class Shape {
public:
// 纯虚函数
virtual double area() const = 0;
virtual double cir() const = 0;
protected:
Shape() {}
~Shape() {}
};
```
接下来,我们为每个派生类(直角三角形、正方形和圆形)提供具体的实现:
```cpp
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double b, double h) : base(b), height(h) {}
double area() override { return 0.5 * base * height; }
double cir() override { return 0; } // 直角三角形无周长
};
class Square : public Shape {
private:
double side;
public:
Square(double s) : side(s) {}
double area() override { return side * side; }
double cir() override { return 4 * side; } // 四边形周长公式
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() override { return M_PI * radius * radius; }
double cir() override { return 2 * M_PI * radius; } // 圆形周长公式
};
```
最后,在主函数`main()`中,我们将基类指针指向不同类型的对象,然后通过动态绑定调用各自的成员函数:
```cpp
int main() {
Shape* shapes[] = {
new Triangle(3, 4),
new Square(5),
new Circle(2)
};
for (Shape* shape : shapes) {
cout << "Area: " << shape->area() << endl;
if (dynamic_cast<Circle*>(shape)) {
cout << "Circle circumference: " << shape->cir() << endl;
} else {
cout << "Non-circle circumference: " << shape->cir() << endl;
}
delete shape;
}
return 0;
}
```
在这个例子中,我们展示了如何通过基础类型指针调用不同派生类的特定功能,实现了动态联编。注意对于非圆形对象(如三角形和正方形),`cir()`方法将返回默认值(对于三角形通常为0)。
阅读全文