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

Item19 设计class犹如设计type

  • 如何创建和销毁
  • 初始化对象和对象的赋值应该有什么差别
  • 以值传递意味着什么
  • 新type的合法值
  • 继承体系
  • 类型转换
  • 操作符重载
  • 继承标准
  • 未声明接口
  • type一般化(template)

Item20 宁以pass-by-reference-to-const替换pass-by-value

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成员变量同样不具备良好的封装性,因为派生类的代码会受影响

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨主任o_o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值