9.3 C

本文讨论了编程中遇到的数值溢出问题,介绍了C++中的复数和虚数类型(如float_complex和complex.h),以及sizeof运算符在不同标准下的使用。

1.上溢和下溢

上溢:当计算导致数字过大,超过当前类型表达的范围,会发生上溢,printf后输出inf or infinity

2.复数和虚数类型:

一.复数:float_complex,double_complex,long double_complex

float_complex类型的变量应包含两个float类型的值,分别表示复数的实部和虚部

例:double_complex cmp =1.3+2.3*I;

double_complex z = 5.2 – 5.0 * I;

二.虚数类型:将complex改为Imaginary

三.若引入 complex.h 的头文件,可以把complex,imaginary分别代替_complex和_Imaginary

还可以用I代替-1的平方根

3.sizeof

sizeof匹配的转化说明:%zd(不支持c99和c11的编译器用%u或%lu)

![](https://cdn.jsdelivr.net/gh/DogLin121/image-hosting@master/images/202504051716814.png) ### 题目重述 **9-3** 构造一个矩形类 `Rectangle`,保存左上角和右下角的点坐标,成员函数包括求出矩形的长、宽、面积等功能,还要有必要的构造函数、输出等功能。定义一个正方形类 `Square`。 --- ### 解答 #### **Rectangle 类设计** ```cpp #include <iostream> #include <cmath> using namespace std; // 点类(用于表示坐标) class Point { private: double x, y; public: // 构造函数 Point(double x = 0, double y = 0) : x(x), y(y) {} // 获取坐标 double getX() const { return x; } double getY() const { return y; } // 设置坐标 void setPoint(double x, double y) { this->x = x; this->y = y; } }; // 矩形类 class Rectangle { private: Point topLeft; // 左上角点 Point bottomRight; // 右下角点 public: // 构造函数 Rectangle(double x1, double y1, double x2, double y2) : topLeft(x1, y1), bottomRight(x2, y2) {} // 计算宽度(横向长度) double getWidth() const { return abs(bottomRight.getX() - topLeft.getX()); } // 计算高度(纵向长度) double getHeight() const { return abs(bottomRight.getY() - topLeft.getY()); } // 计算面积 double getArea() const { return getWidth() * getHeight(); } // 输出矩形信息 void display() const { cout << "矩形: 左上角(" << topLeft.getX() << ", " << topLeft.getY() << "), 右下角(" << bottomRight.getX() << ", " << bottomRight.getY() << ")" << endl; cout << "宽度: " << getWidth() << ", 高度: " << getHeight() << ", 面积: " << getArea() << endl; } }; // 正方形类(继承自 Rectangle) class Square : public Rectangle { public: // 构造正方形:给定左上角和边长 Square(double x, double y, double side) : Rectangle(x, y, x + side, y - side) {} // 假设向下为y正方向则调整 }; ``` #### **测试主函数** ```cpp int main() { // 创建一个矩形:左上角(1, 5),右下角(6, 2) Rectangle rect(1, 5, 6, 2); rect.display(); cout << endl; // 创建一个正方形:左上角(0, 4),边长4 Square square(0, 4, 4); square.display(); return 0; } ``` --- ### **代码解析** 1. **Point 类**:封装二维坐标点,提供基本的访问和修改功能。 2. **Rectangle 类**: - 使用两个 `Point` 对象表示矩形区域; - 提供 `getWidth()` 和 `getHeight()` 计算尺寸; - `getArea()` 返回面积; - `display()` 打印详细信息。 3. **Square 类**:继承 `Rectangle`,通过固定边长构造正方形。 > 注意:坐标系中通常屏幕Y轴向下增长,因此右下角的Y值应大于左上角。此处假设数学标准坐标系(向上为正),所以 `y - side` 表示向下移动。 --- ### 知识点 - **类与对象**:C++中通过`class`定义数据结构及其操作,封装属性和方法。 - **构造函数**:初始化对象成员,支持默认参数与初始化列表。 - **继承机制**:`Square`复用`Rectangle`的功能,体现面向对象的扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值