1、已定义一个抽象类Shape,在此基础上派生出两个类:Rectangle(矩形)和Circle(圆形)。Rectangle类有数据成员长度length和宽度width,Circle类有数据成员半径radius,二者都有perimeter( )函数计算周长,都有构造函数和拷贝构造函数,并编写main( )函数测试多态。 class Shape { public: Shape( ){} ~Shape( ){} virtual float perimeter( )=0; }
时间: 2024-02-25 13:57:51 浏览: 56
好的,让我来回答你的问题。
针对你的问题,我可以看出你已经定义了一个抽象类Shape,并且在此基础上派生出了两个类:Rectangle和Circle。Rectangle类有数据成员长度length和宽度width,Circle类有数据成员半径radius。二者都有perimeter()函数计算周长,并都有构造函数和拷贝构造函数。这里使用了多态,因为Shape是一个抽象类,它的perimeter()函数是一个纯虚函数,而Rectangle和Circle都继承了Shape,并且都实现了自己的perimeter()函数,所以在运行时可以根据实际对象的类型来调用对应的perimeter()函数。
以下是一个示例代码,你可以参考一下:
```
#include <iostream>
#include <cmath>
using namespace std;
class Shape {
public:
Shape() {}
virtual ~Shape() {}
virtual float perimeter() = 0;
};
class Rectangle : public Shape {
public:
Rectangle(float l, float w) : length(l), width(w) {}
Rectangle(const Rectangle& other) : length(other.length), width(other.width) {}
virtual ~Rectangle() {}
virtual float perimeter() {
return 2 * (length + width);
}
private:
float length, width;
};
class Circle : public Shape {
public:
Circle(float r) : radius(r) {}
Circle(const Circle& other) : radius(other.radius) {}
virtual ~Circle() {}
virtual float perimeter() {
return 2 * M_PI * radius;
}
private:
float radius;
};
int main() {
Shape* s1 = new Rectangle(5, 10);
Shape* s2 = new Circle(2);
cout << "Rectangle perimeter: " << s1->perimeter() << endl;
cout << "Circle perimeter: " << s2->perimeter() << endl;
delete s1;
delete s2;
return 0;
}
```
在这个示例中,我们定义了一个Shape抽象类,并且派生出了Rectangle和Circle两个类。在Rectangle和Circle类中,我们实现了perimeter()函数来计算周长。在main()函数中,我们创建了两个Shape类型的指针,分别指向一个Rectangle和一个Circle对象。在输出周长时,我们调用了对应的perimeter()函数。最后,我们释放了动态分配的内存。
希望这个例子能够帮助你理解多态的概念,如果还有其他问题,请继续提问。
阅读全文