Item19 设计class犹如设计type
- 如何创建和销毁
- 初始化对象和对象的赋值应该有什么差别
- 以值传递意味着什么
- 新type的合法值
- 继承体系
- 类型转换
- 操作符重载
- 继承标准
- 未声明接口
- type一般化(template)
Item20 宁以pass-by-reference-to-const替换pass-by-value
Item22 将成员变量声明为private
有以下几个优势:
1. 语法一致性:访问class成员时每一个都是函数,不需要记住是否需要小括号
2. 使成员变量的处理有更精准的控制文章来源:https://www.toymoban.com/news/detail-820718.html
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. 实现良好的封装特性文章来源地址https://www.toymoban.com/news/detail-820718.html
- 实现平均速度有两种方法:
- 通过成员变量记录平均值,同时还得维护累计总量等其他信息,会使内存空间变大;
- 被调用时才会计算平均值,可以改动实现方法,较为灵活(缺点是执行速度变慢)
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成员变量同样不具备良好的封装性,因为派生类的代码会受影响
到了这里,关于【Effective C++】4. 设计与声明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!