运用多态编写程序,声明抽象基类shape,由它派生出3个派生类: circle(圆形)、rectangle(矩形)、triangle(三角形),用一个函数printarea()分别输出以上三者的面积(
时间: 2023-05-31 07:17:51 浏览: 243
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
5星 · 资源好评率100%
### 回答1:
代码如下:
```
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) {
radius = r;
}
double getArea() {
return 3.14 * radius * radius;
}
};
class Rectangle : public Shape {
private:
double length, width;
public:
Rectangle(double l, double w) {
length = l;
width = w;
}
double getArea() {
return length * width;
}
};
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double b, double h) {
base = b;
height = h;
}
double getArea() {
return 0.5 * base * height;
}
};
void printArea(Shape* s) {
cout << "面积为:" << s->getArea() << endl;
}
int main() {
Circle c(5);
Rectangle r(3, 4);
Triangle t(2, 5);
printArea(&c);
printArea(&r);
printArea(&t);
return 0;
}
```
运行结果:
```
面积为:78.5
面积为:12
面积为:5
```
### 回答2:
运用多态编写程序是一种高级的编程技巧,能够让代码更加简洁和高效。在本题中,我们需要声明一个抽象基类shape,用于派生出三个具体的形状类: circle、rectangle、triangle,每个类都可以计算并输出自己的面积。这里我们需要注意的是,只有派生类具体实现了计算面积的方法,而抽象基类中只能声明一个抽象的计算面积的方法,并不包含具体实现。
首先,声明一个抽象基类shape,并在其中添加一个纯虚函数计算面积:
```cpp
class shape
{
public:
virtual double area() = 0; // 纯虚函数,为计算面积预留一个接口
};
```
然后,我们可以派生出三个具体形状类,包括circle、rectangle、triangle。每个类都需要实现自己的面积计算方法,这里以矩形为例:
```cpp
class rectangle : public shape
{
public:
rectangle(double w, double h) : m_width(w), m_height(h) {} // 构造函数
double area() override { return m_width * m_height; } // 计算面积的方法
private:
double m_width;
double m_height;
};
```
最后,我们可以定义一个printarea()函数,用于输出各个形状的面积,实现多态的效果。具体实现方式如下:
```cpp
void printarea(shape* pShape) // 参数为指向shape对象的指针
{
cout << "面积为:" << pShape->area() << endl; // 多态调用每个对象的area()方法
}
```
在主函数中,我们可以创建各种形状的对象,并调用printarea()函数打印它们的面积,如下所示:
```cpp
int main()
{
shape* pShape = nullptr;
rectangle rect(3, 4);
circle cir(5);
triangle tri(3, 4, 5);
pShape = ▭ // 指向矩形对象
printarea(pShape); // 输出矩形的面积
pShape = ○ // 指向圆形对象
printarea(pShape); // 输出圆形的面积
pShape = &tri; // 指向三角形对象
printarea(pShape); // 输出三角形的面积
return 0;
}
```
这样,我们就可以用一个函数printarea()分别输出矩形、圆形、三角形等各种形状的面积了。通过运用多态的技巧,我们的代码变得更加简洁和高效,是一种很好的编程实践。
### 回答3:
多态是面向对象编程的一大特征,它允许同一个函数或方法在不同的情况下具有不同的表现形式,让编程变得更加灵活和扩展。
在这个题目中,我们可以通过运用多态编写一个程序,即声明一个抽象基类shape,然后派生出三个派生类:circle、rectangle和triangle,每个派生类都有一个计算面积的函数area(),同时还需要重写虚函数printarea()以输出相应的面积值。
下面是代码实现:
#include<iostream>
using namespace std;
class shape{
public:
virtual float area() = 0; //纯虚函数,不设置函数体
virtual void printarea() = 0; //纯虚函数,不设置函数体
};
class circle:public shape{
public:
float radius;
circle(float r){ radius = r;}
float area(){ return 3.14 * radius * radius;}
void printarea(){ cout << "圆形的面积为:" << area() << endl;}
};
class rectangle:public shape{
public:
float length, width;
rectangle(float l, float w){ length = l; width = w;}
float area(){ return length * width;}
void printarea(){ cout << "矩形的面积为:" << area() << endl;}
};
class triangle:public shape{
public:
float bottom, height;
triangle(float b, float h){ bottom = b; height = h;}
float area(){ return 0.5 * bottom * height;}
void printarea(){ cout << "三角形的面积为:" << area() << endl;}
};
int main(){
circle c(5);
rectangle r(4,6);
triangle t(3,4);
shape *p; //声明一个指向shape类的指针
p = &c; //指向圆形类
p->printarea();
p = &r; //指向矩形类
p->printarea();
p = &t; //指向三角形类
p->printarea();
return 0;
}
在程序中,我们首先定义了一个抽象基类shape,其中包含了两个纯虚函数area()和printarea()。接着,通过派生类circle、rectangle和triangle,分别实现了计算面积和输出面积的函数。
在主函数中,我们使用指向shape类的指针p将其指向circle、rectangle和triangle三个不同的对象,然后再调用它们各自的printarea()函数。这样便实现了多态的应用,提高了代码的灵活性和扩展性。
总之,通过本题的练习,我们进一步理解了多态的概念和应用,掌握了如何用多态编写程序。这对我们日后的面向对象编程十分有帮助。
阅读全文