条款18:让接口容易被正确使用,不易被误用
条款19:设计class犹如设计type
条款20:宁以pass by reference to const替换pass by value
- pass by reference to const效率高且避免对象切割
- 内置类型、STL迭代器、函数对象选用pass by value
条款21:必须返回对象时,别妄想返回reference
- 不要返回local stack对象
- 返回heap-allocated对象可能会造成资源泄露
- 返回指向local static对象可能会产生共享等问题
条款22:将变量名称声明为private
- 可以保持访问的一致性,即调用的public接口都是函数,用小括号
- protected类型与public封装性一样(封装性与内容改变时造成代码的破坏量成反比,protected成员在derived对象中仍然可以访问)
条款23:宁以non-member、non-friend函数替换member函数
- 越少的函数访问对象内的数据,封装性越高
- non-member、non-friend函数和class定义在同一个命名空间内增加代码的封装性和扩充能力
- 命名空间可以跨源文件合并
条款24:若所有参数皆需要类型转换,请为此采用non-member函数
1 class Rational{
2 public:
3 Rational(int numerator = 0, int denominator = 1);
4 int numerator() const;
5 int denominator() const;
6
7 const Rational operator*(const Rational& ) const;
8 private:
9 //...
10 };
11
12 Rational oneEight(1, 8);
13 Rational oneHalf(1, 2);
14 Rational result1 = oneHalf * 2; //ok Rational result1 = oneHalf.operator*(2);
15 Rational result2 = 2 * oneHalf; //error Rational result1 = 2.operator*(oneHalf);
条款25:考虑写出一个不抛出异常的swap函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现