已解决
读书笔记:Effective C++ 2.0 版,条款20(避免public出现数据成员)、条款21(尽量用const)
来自网友在路上 149849提问 提问时间:2023-10-23 23:48:20阅读次数: 49
最佳答案 问答题库498位专家为你答疑解惑
条款20: 避免public接口出现数据成员
三个原因:
接口一致性:统一范式的get set,避免混合。
接口无歧义:精确控制数据成员的get、set。
功能分离(functional abstraction):接口一致,数据成员可换。
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; // 禁止访问这个intint readonly; // 可以只读这个intint readwrite; // 可以读/写这个intint writeonly; // 可以只写这个int
};
条款21: 尽可能使用const
语义明确,方便编译器优化,方便用户理解使用接口。
const从右往左进行修饰,或者以*为分界线看。
char *p = "hello"; // 非const指针,// 非const数据
const char *p = "hello"; // 非const指针,// const数据
char const *p = "hello"; // 同上,更标准的写法。
char * const p = "hello"; // const指针,// 非const数据
const char * const p = "hello"; // const指针,// const数据
char const * const p = "hello"; // 同上,更标准的写法。
用const对函数返回值进行修饰,以下为定义范式
const rational operator*(const rational& lhs,const rational& rhs);
rational a, b, c;
(a * b) = c; // 对a*b的结果赋值
const成员函数的目的当然是为了指明哪个成员函数可以在const对象上被调用。
仅在const方面有不同的成员函数可以重载,这是c++的一个重要特性。
以下为定义范式:
class string {
public:...// 用于非const对象的operator[]char& operator[](int position){ return data[position]; }// 用于const对象的operator[]const char& operator[](int position) const{ return data[position]; }
private:char *data;
};
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"读书笔记:Effective C++ 2.0 版,条款20(避免public出现数据成员)、条款21(尽量用const)":http://eshow365.cn/6-22821-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 【前端学习】—Vue生命周期(十七)
- 下一篇: excel单元格各种组合求和