读书笔记:Effective C++ 2.0 版,条款20(避免public出现数据成员)、条款21(尽量用const)

编程入门 行业动态 更新时间:2024-10-23 15:31:42

读书笔记:Effective C++ 2.0 版,<a href=https://www.elefans.com/category/jswz/34/1761563.html style=条款20(避免public出现数据成员)、条款21(尽量用const)"/>

读书笔记:Effective C++ 2.0 版,条款20(避免public出现数据成员)、条款21(尽量用const)

条款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;
};

更多推荐

读书笔记:Effective C++ 2.0 版,条款20(避免public出现数据成员)、条款21(尽量用const)

本文发布于:2023-12-04 07:18:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1660162.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:条款   读书笔记   成员   数据   Effective

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!