在基类TDshape中设计纯虚函数area()和printName(),area()用于计算几何图形的面积,printName()用语打印输出几何图形的类名,如Triangle类的对象就打印输出“”Triangle“。每个具体形状的类则从抽象类TDshape派生,各自需要定义其独有的数据成员和成员函数,并且定义area()和printName()的具体实现代码。要求编写以TDshape为接口的函数,借以访问具体类如Triangle和Rectangle类的成员函数area(),printName()。
时间: 2023-06-10 22:04:53 浏览: 44
好的,我会根据您的要求进行回答。您提出的问题涉及到设计模式中的抽象类和虚函数,是一个比较基础的面向对象程序设计问题。
首先,基类TDshape中定义了两个纯虚函数area()和printName(),这意味着这两个函数没有具体的实现代码,需要在具体的派生类中实现。由于TDshape是一个抽象类,不能够实例化对象,只有被具体的派生类实现之后,才能够创建出具体的对象。
例如,Triangle和Rectangle类都是从TDshape派生出来的具体类,在这两个类中需要实现独有的数据成员和成员函数,并且要实现基类中定义的area()和printName()函数。Triangle类实现的代码可能如下所示:
```
class Triangle : public TDshape {
public:
Triangle(double w, double h) : width(w), height(h) {}
double area() { return 0.5 * width * height; }
void printName() { cout << "Triangle" << endl; }
private:
double width, height;
};
```
Rectangle类的代码也类似,我们不在此赘述。
然后是如何编写以TDshape为接口的函数,借以访问具体类的成员函数。我们可以使用基类的指针来指向具体的派生类对象,在运行时绑定调用正确的接口函数。
例如,下面是一个访问Triangle类和Rectangle类对象的函数的代码:
```
void processShape(TDshape* shape) {
shape->printName();
cout << "The area is: " << shape->area() << endl;
}
```
在这个函数中,我们传入一个指向TDshape对象的指针(shape),然后调用它的printName()函数和area()函数,由于在Triangle类和Rectangle类中都有对应的函数实现,因此会调用正确的实现代码。
在使用这个函数的时候,我们可以创建Triangle类和Rectangle类的对象,并将它们作为参数传递给processShape()函数,如下所示:
```
Triangle t(3.0, 4.0);
Rectangle r(2.0, 4.0);
processShape(&t);
processShape(&r);
```
这样,就能够打印出Triangle和Rectangle的类名,并且计算出它们的面积了。
以上就是我对您提出的问题的回答,希望能够对您有所帮助。