25、C++ 类与类型:从基础到高级应用

C++ 类与类型:从基础到高级应用

1. 类与类型概述

在编程中,我们并不一定要摒弃普通整数和其他内置类型,转而使用包装类。例如在计算和管理 BMI 的程序中,使用普通的 int 变量,并通过仔细编码和校对来防止和检测错误,是一种可行的做法。但在大型程序中,如果身高和体重等数据频繁出现,使用包装类可以减少错误,还能添加错误检查、对值的范围施加约束等。

2. 值类型

值类型(如身高和体重类型)的行为类似于普通值,与 I/O 流类型有很大不同。I/O 流类型不能复制或赋值,必须通过引用传递给函数,也不能进行比较或算术运算。而值类型设计上与内置类型(如 int 和 float)行为相似,重要特性之一是可以存储在容器(如 vector 和 map)中。

值类型的基本准则是使其行为“像 int”,在复制、比较和执行算术运算时,要尽可能与内置类型保持一致,避免意外情况。

3. 复制操作

复制 int 会得到一个与原 int 无法区分的新 int,自定义类型也应如此。以 string 为例,不同的实现方式对复制有不同的优化:
- 写时复制(Copy-on-Write)实现 :实际字符串内容与字符串对象分开存储。字符串对象的副本在需要修改内容之前不会复制内容,避免了不必要的复制。
- 小字符串优化实现 :小字符串的内容存储在字符串对象中,大字符串单独存储。复制小字符串很快,但复制大字符串较慢。

通常,编译器的自动复制构造函数能满足需求,但我们仍需思考复制操作,确保自动复制构造函数符合我们的期望。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值