用抽象类设计计算二维平面图形面积的程序,在基类TDshape中设计纯虚函数area()和printName()。area()用于计算几何图形的面积,printName()用于打印输出几何图形的类名,如Triangle类的对象就打印输出“Triangle”。每个具体形状的类则从抽象类TDshape派生,各自定义其独有的数据成员和成员函数,并定义area()和printName()的具体实现代码。函数fp和函数fr是以TDshape为接口的函数,借以访问具体类如Triangle和Rectangle类的成员函数area()和printName()。
时间: 2023-07-15 16:13:55 浏览: 48
以下是使用抽象类设计计算二维平面图形面积的程序:
```c++
#include<iostream>
using namespace std;
class TDshape {
public:
virtual void printName() = 0;
virtual double area() = 0;
};
class Triangle : public TDshape {
public:
Triangle(double b = 0, double h = 0) : base(b), height(h) {}
void printName() {
cout << "Triangle" << endl;
}
double area() {
return base * height / 2.0;
}
private:
double base, height;
};
class Rectangle : public TDshape {
public:
Rectangle(double w = 0, double h = 0) : width(w), height(h) {}
void printName() {
cout << "Rectangle" << endl;
}
double area() {
return width * height;
}
private:
double width, height;
};
void fp(TDshape &s) {
s.printName();
cout << "Area: " << s.area() << endl;
}
void fr(Rectangle &r) {
r.printName();
cout << "Area: " << r.area() << endl;
}
int main() {
Triangle t(4, 5);
Rectangle r(3, 6);
fp(t);
fp(r);
fr(r);
return 0;
}
```
在上述程序中,TDshape类是一个抽象类,包含纯虚函数printName()和area(),由于这两个函数没有具体实现,所以TDshape类不能被实例化,只能用于派生其他类。
Triangle和Rectangle类都是从TDshape类派生的,分别实现了自己独有的数据成员和成员函数,并且重载了printName()和area()函数,以便分别输出自己的类名和计算自己的面积。
函数fp和函数fr是使用TDshape为接口的函数,通过抽象类TDshape访问Triangle和Rectangle类的成员函数printName()和area()。fp函数可以接受TDshape类型的参数,调用传入对象的printName()和area()函数,输出对象的类名和面积。而fr函数则只能接受Rectangle类型的参数,因为它需要调用Rectangle类特有的成员函数area()。
在主函数中,我们创建了一个Triangle对象和一个Rectangle对象,并将它们作为参数传递给fp函数和fr函数,以便输出它们的类名和面积。输出结果如下:
```
Triangle
Area: 10
Rectangle
Area: 18
Rectangle
Area: 18
```
从输出结果可以看出,程序成功地计算了Triangle和Rectangle的面积,并输出了它们的类名。