写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()、printLength()分别输出以上三者的面积和周长,三个图形的数据在定义对象时给定。另外实现一个通用的函数计算面积和周长,而不需要考虑是何种图形。
时间: 2024-02-16 13:04:03 浏览: 48
c++ 形状类Shape(派生出圆类Circle和矩形类Rectangle)
以下是实现上述功能的程序:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getArea() = 0;
virtual double getLength() = 0;
virtual void printArea() = 0;
virtual void printLength() = 0;
};
class Circle : public Shape {
private:
double r;
public:
Circle(double r) : r(r) {}
double getArea() {
return 3.1415926 * r * r;
}
double getLength() {
return 2 * 3.1415926 * r;
}
void printArea() {
cout << "圆形的面积为:" << getArea() << endl;
}
void printLength() {
cout << "圆形的周长为:" << getLength() << endl;
}
};
class Square : public Shape {
private:
double a;
public:
Square(double a) : a(a) {}
double getArea() {
return a * a;
}
double getLength() {
return 4 * a;
}
void printArea() {
cout << "正方形的面积为:" << getArea() << endl;
}
void printLength() {
cout << "正方形的周长为:" << getLength() << endl;
}
};
class Rectangle : public Shape {
private:
double l, w;
public:
Rectangle(double l, double w) : l(l), w(w) {}
double getArea() {
return l * w;
}
double getLength() {
return 2 * (l + w);
}
void printArea() {
cout << "矩形的面积为:" << getArea() << endl;
}
void printLength() {
cout << "矩形的周长为:" << getLength() << endl;
}
};
double calcArea(Shape* s) {
return s->getArea();
}
double calcLength(Shape* s) {
return s->getLength();
}
int main() {
Circle c(5);
Square s(4);
Rectangle r(3, 5);
c.printArea();
c.printLength();
s.printArea();
s.printLength();
r.printArea();
r.printLength();
cout << "所有图形的面积之和为:" << calcArea(&c) + calcArea(&s) + calcArea(&r) << endl;
cout << "所有图形的周长之和为:" << calcLength(&c) + calcLength(&s) + calcLength(&r) << endl;
return 0;
}
```
在这个程序中,Shape类是一个抽象基类,它定义了纯虚函数getArea()和getLength(),还定义了虚函数printArea()和printLength()。Circle、Square和Rectangle是Shape的派生类,它们分别实现了Shape类的纯虚函数,并重载了虚函数printArea()和printLength()。
在主函数中,分别定义了Circle、Square和Rectangle的对象,并调用它们的printArea()和printLength()函数,输出它们的面积和周长。然后通过calcArea()和calcLength()函数,计算了所有图形的面积和周长之和。
阅读全文