练习2:创建对象并计算长方形面积¶
任务描述¶
设计一个长方形类 Rectangle。通过普通函数创建 Rectangle 对象,并通过对象调用成员函数计算长方形面积。
本题将练习对象的创建、对象作为函数返回值与参数,以及通过对象访问公有成员函数。
相关知识¶
对象¶
类是对一组具有共同特征的对象的抽象描述;类的实例称为对象。创建对象的语法与声明普通变量类似:
每个对象分别拥有自己的数据成员存储空间,而同一个类的对象共享该类定义的成员函数。
通过对象访问成员¶
使用成员访问运算符 . 可以访问对象的公有成员。对于成员函数,使用对象名、. 和函数名调用:
私有数据成员不能在类外直接访问,因此下面的写法是错误的:
应当通过公有成员函数 Set 设置长方形的高和宽。
对象作为函数的返回值和参数¶
对象可以作为普通函数的返回值或参数:
Rectangle GetRect(int h, int w); // 返回 Rectangle 对象
int GetRectArea(Rectangle rect); // 接收 Rectangle 对象并返回面积
在 GetRect 中创建对象、设置其数据后返回;在 GetRectArea 中通过 rect.GetArea() 调用对象的公有成员函数。
编程要求¶
- 使用 C++11 标准编写程序。
- 在文件
Rectangle.h中声明类Rectangle,包含以下成员:
- 在
Rectangle.h中同时声明以下普通函数:
- 在文件
Rectangle.cpp中包含Rectangle.h,并完成两个成员函数和两个普通函数的定义。 Set将参数h、w分别赋给height、width;GetArea返回height * width。GetRect创建一个Rectangle对象,调用Set(h, w)设置长和宽后返回该对象。GetRectArea调用参数对象的GetArea(),并返回得到的面积。- 在
main.cpp的test函数中使用assert验证两组面积计算结果,并断言输出字符串与预期完全一致;在main函数中调用test。
待完成代码¶
Rectangle.h¶
Rectangle.cpp¶
main.cpp¶
#include "Rectangle.h"
#include <cassert>
#include <iostream>
#include <sstream>
void test() {
Rectangle rect1 = GetRect(10, 15);
assert(GetRectArea(rect1) == 150);
std::ostringstream output1;
std::streambuf* oldBuffer = std::cout.rdbuf(output1.rdbuf());
std::cout << "长方形的面积为:" << GetRectArea(rect1) << '\n';
std::cout.rdbuf(oldBuffer);
assert(output1.str() == "长方形的面积为:150\n");
Rectangle rect2 = GetRect(100, 100);
assert(GetRectArea(rect2) == 10000);
std::ostringstream output2;
oldBuffer = std::cout.rdbuf(output2.rdbuf());
std::cout << "长方形的面积为:" << GetRectArea(rect2) << '\n';
std::cout.rdbuf(oldBuffer);
assert(output2.str() == "长方形的面积为:10000\n");
}
int main() {
test();
std::cout << "本关测试通过" << std::endl;
return 0;
}
测试说明¶
测试包含两组长方形尺寸。assert 既验证 GetRectArea 的返回值,也验证输出格式:
| 高度 | 宽度 | 预期面积 | 预期输出 |
|---|---|---|---|
10 |
15 |
150 |
长方形的面积为:150 |
100 |
100 |
10000 |
长方形的面积为:10000 |
可使用以下命令编译三个文件:
开始你的任务吧,祝你成功!