当前位置: 首页 > news >正文

【Effective C++】4. 设计与声明

Item22 将成员变量声明为private

有以下几个优势:

1. 语法一致性:访问class成员时每一个都是函数,不需要记住是否需要小括号

2. 使成员变量的处理有更精准的控制

class AccessLevels {
public:
    int getReadOnly() const { return readOnly; }
    void setReadWrite(int value) { readWrite = value; }
    int getReadWrite() const { return readWrite; }
    void setWriteOnly(int value) { writeOnly = value; }
private:
    int noAccess; // 无访问动作
    int readOnly;
    int readWrite;
    int writeOnly;
};

3. 实现良好的封装特性

  • 实现平均速度有两种方法:
    • 通过成员变量记录平均值,同时还得维护累计总量等其他信息,会使内存空间变大;
    • 被调用时才会计算平均值,可以改动实现方法,较为灵活(缺点是执行速度变慢)
class SpeedDataCollection {
public:
    void addValue(int speed) {
        speedList.push_back(speed);
    }
    double averageSoFar() const {
        int sum = std::accumulate(speedList.begin(), speedList.end(), 0);
        return static_cast<double>(sum)/speedList.size();
    }
private:
    std::vector<int> speedList;
};
  • 封装后,只有成员函数能影响它们
    • 如果不封装,改变成员变量,涉及改动的代码太多,维护成本高
  • protected成员变量同样不具备良好的封装性,因为派生类的代码会受影响

http://www.dtcms.com/a/7681.html

相关文章:

  • OpenKruiseGame × KubeSphere 联合发布游戏服运维控制台,推动云原生游戏落地
  • 1.24寒假集训
  • C++高精度问题
  • 【大数据精讲】全量同步与CDC增量同步方案对比
  • (2)(2.4) CRSF/ELRS Telemetry
  • 2024免费mathtype7.4.4安装注册步骤教程
  • 【AI视野·今日NLP 自然语言处理论文速览 第七十五期】Thu, 11 Jan 2024
  • 【GitHub项目推荐--微软开源的课程(Web开发课程/机器学习课程/物联网课程/数据科学课程)】【转载】
  • openssl3.2/test/certs - 004 - cross root and root cross cert
  • Hadoop安装配置HBase
  • [设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式
  • 【196】JAVA8 用 DOM 方式的 API 解析XML文件,无需引入第三方依赖。
  • vue中使用锚点定位
  • 项目实战——Qt实现FFmpeg音视频转码器
  • Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件
  • initdb: command not found【PostgreSQL】
  • TCP/IP四层模型对比OSI七层网络模型的区别是啥?数据传输过程原来是这样的
  • 【C++】list容器功能模拟实现
  • Spring Boot整合MyBatis-Plus
  • 【BBuf的CUDA笔记】十三,OpenAI Triton 入门笔记一
  • NLP自然语言处理原理应用讲解
  • LeetCode59 螺旋矩阵 II
  • k8s---ingress对外服务(traefik)
  • C# 基础入门
  • UE4 添加按键输入事件 并在蓝图中使用按键输入节点
  • Java算法 leetcode简单刷题记录4
  • 【Linux工具篇】软件包管理器yum
  • HarmonyOS 应用开发入门
  • c语言0基础笔记
  • 【轮式平衡机器人】——软硬件配置/准备