二级C++机试改错与函数优化
需积分: 3 9 浏览量
更新于2024-09-19
收藏 76KB DOC 举报
本题是针对C++二级考试的上机试题,着重考察了面向对象编程的基本概念和函数调用。题目要求考生对提供的源程序文件`test18_1.cpp`进行修改,解决其中的错误。首先,我们来看一下存在的问题:
1. 错误1:inlineradius() - 函数定义错误:题目指出在代码中有一个名为`inlineradius()`的内联函数,但这在C++中是不推荐的,因为内联函数(inline)应该用于小型、频繁被调用且没有副作用的函数。在这里,计算圆的半径涉及到乘法和平方根运算,更适合作为非内联成员函数。正确的做法是将`inline`关键字移除,将其改为普通成员函数`doubleradius()`。
2. 错误2:p.x+=5;p.y+=6; - 属性修改错误:这里试图直接通过对象的成员变量`x`和`y`进行增量操作,但在面向对象编程中,应当使用成员函数来改变对象的状态。正确的做法是调用`set`方法,将增量结果传递给`xoffset()`和`yoffset()`,然后设置新的坐标,即`p.set((p.xoffset()+5), (p.yoffset()+6))`。
3. 错误3:缺少保护成员和构造函数 - 题目提到应在结构体`point`中添加保护成员,以及可能的构造函数。由于题目未提供完整代码,我们可以假设`x`和`y`应是私有成员,并添加一个默认构造函数`point()`以便实例化对象。完整的代码可能如下所示:
```cpp
class point
{
private:
double x;
double y;
public:
// 默认构造函数
point() : x(0), y(0) {}
void set(double ix, double iy)
{
x = ix;
y = iy;
}
double xoffset() const { return x; }
double yoffset() const { return y; }
double angle() const { return (180 / 3.14159) * atan2(y, x); }
// 更正后的radius方法
double doubleradius() const { return sqrt(x * x + y * y); }
// 修改后的增量操作
void set_offset(double xoffset, double yoffset)
{
p.set(x + xoffset, y + yoffset);
}
};
```
在`main`函数中,应使用修正后的`set_offset`方法:
```cpp
void main()
{
point p;
double x, y;
cout << "Enter x and y:\n";
cin >> x >> y;
p.set(x, y);
p.set_offset(5, 6);
// ...
}
```
通过这次改错,考生不仅需要熟悉C++的语法,还要理解面向对象编程的原则,特别是如何正确地操作对象属性和调用成员函数。这是一个综合运用类的封装、数据隐藏和继承等特性的好例子。
2021-09-29 上传
2008-12-18 上传
2022-10-23 上传
2022-10-27 上传
2012-03-18 上传
2021-10-14 上传
2021-10-10 上传
2021-10-06 上传
2021-10-10 上传
wuzhaoxuan123
- 粉丝: 0
- 资源: 5
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章