C++求图形面积(完整版各种输入错误情况校验)
### C++ 求图形面积程序分析 #### 程序概述 本程序是一个使用C++编写的简单图形面积计算程序。它通过面向对象的方法实现了对不同形状(圆、正方形、圆柱)面积的计算,并针对用户输入进行了错误处理。程序主要运用了类、继承与多态等面向对象编程技术。 #### 主要知识点 ##### 1. 类与对象 在程序中,定义了一个抽象基类`shape`,该类包含两个纯虚函数:`area()`用于计算面积,`shapeName()`用于显示图形名称。接着,定义了三个派生类:`Circle`、`Square`和`Circle_Zhu`,它们分别表示圆、正方形和圆柱。这些派生类实现了从`shape`继承来的纯虚函数。 - **Circle**:代表圆。成员变量`radius`存储圆的半径。 - **Square**:代表正方形。成员变量`size`存储正方形的边长。 - **Circle_Zhu**:代表圆柱。成员变量`radius`和`height`分别存储圆柱的底面半径和高。 ##### 2. 多态性 程序通过指针`p`指向不同类型的图形对象,调用`shapeName()`和`area()`函数。由于`shape`是抽象类,因此无法实例化,但可以声明指向其派生类对象的指针。这样,程序可以根据具体创建的对象类型动态调用相应的函数实现,体现了多态性。 ##### 3. 输入验证 程序在用户输入数据时加入了异常处理机制,确保输入的有效性。例如,对于圆的半径或正方形的边长,如果输入为负数,则抛出异常并提示用户重新输入。对于圆柱的半径和高,也进行了类似的检查。这提高了程序的健壮性和用户体验。 - **Circle**: - 如果输入的半径小于0,则抛出异常并提示用户“半径值为”。 - **Square**: - 如果输入的边长小于0,则抛出异常并提示用户“边长值为”。 - **Circle_Zhu**: - 如果输入的半径或高小于0,则根据具体情况抛出不同的异常信息。 ##### 4. 用户交互 程序提供了一个简单的文本菜单供用户选择要计算面积的图形类型。用户可以选择计算圆、正方形或圆柱的面积。通过循环和条件语句,程序实现了用户的选择和异常处理,确保程序能够正常运行并给出正确的结果。 #### 示例代码分析 程序中有一个名为`show`的函数,用于显示菜单选项。主函数`main`负责处理用户的输入并根据输入创建相应的图形对象,然后调用其成员函数进行计算和显示结果。其中使用了`try-catch`结构来捕获并处理可能出现的异常情况。 ##### 实现细节 1. **异常处理**:通过`throw`抛出异常,`catch`捕获异常并处理。 2. **字符串转换**:使用`atof`将字符数组转换为浮点数。 3. **循环控制**:使用`do-while`循环保证用户至少执行一次输入操作,并且可以根据条件继续执行或退出。 通过以上分析可以看出,本程序不仅展示了C++中的面向对象编程特性,如类、继承、多态以及异常处理等概念的应用,还体现了良好的用户交互设计和错误处理机制,是一份很好的学习材料。
using namespace std;
const double p = 3.14159;
class shape
{
public:
virtual double area() = 0; //声明纯虚函数
virtual void shapeName() = 0;
};
class Circle:public shape //类继承
{
public:
Circle(double r)
{
radius = r;
}
double area()
{
return p*radius*radius;
}
void shapeName()
{
cout<<"Circle:"<<endl;
}
~Circle(){};
private:
double radius;
};
class Square:public shape
public:
Square(double s)
{
size = s;
}
~Square(){};
double area()
{
return size*size;
}
void shapeName()
{
cout<<"Square:"<<endl;
}
private:
double size;
};
class Circle_Zhu:public shape
{
public:
Circle_Zhu(double r,double h)
{
radius = r;
height = h;
}
~Circle_Zhu(){}; //析构函数清理内存空间
double area()
{
return p*radius*radius*height;
剩余6页未读,继续阅读
- jameszhan72013-06-15几个典型的图形求解
- 自由的迷鹿2015-07-17例子简单实用,但如果再全面些就更好了
- 粉丝: 1
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助