腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
C++primer学习笔记
共 6 篇文章
加入清单架
1
C++primer学习笔记(一)
2
C++primer学习笔记(二)
3
C++primer学习笔记(三)
4
C++primer学习笔记(四)
5
C++primer学习笔记(五)
6
C++primer学习笔记(六)
清单首页
C++primer学习笔记
文章详情
清单「C++primer学习笔记」 05/06
C++primer学习笔记(五)
震八方紫面昆仑侠
简单说,类就是定义了一个新的类型和一个新的作用域。成员访问级别默认私有。在声明和定义处指定inline都是合法的。类的前向声明一般用来编写相互依赖的类。类定义以分号结束,之后可以跟对象列表。
mytye.func1().func2()想要这种形式,就必须返回*this的引用才能调用func2。成员函数是否为const等同于形参this是否const,所以可以重载。mutable用来声明数据成员可以修改【突破各种const的限制】。
使用类外全局作用域的变量可以::var来获得。
类中的const成员必须在初始化列表中初始化,无法再构造函数体内赋值。初始化const或引用类型或没有默认构造函数的类类型数据成员的唯一机会是构造函数的初始化列表【冒号开始,逗号分隔】。初始化顺序由定义顺序决定,而不是初始化列表顺序。
友元:将非公有成员的访问权授予指定的类或函数。friend在类定义内部。友元引入的类名和函数(定义或声明)可以像预先声明的一样使用。
static成员函数没有this形参,可直接访问类的static成员,不能使用非static成员。
静态数据成员属于一个类,而不属于类的各个对象。静态成员函数在所有对象建立之前或删除之后仍然使用。
初始化时是否调用复制构造函数取决于是否有=【拷贝构造函数,复制也叫拷贝构造函数是用同一个类的一个对象初始化另一个对象,普通构造函数是用各种参数初始化一个类的对象】。构造函数如果是explicit必须严格按照定义使用构造函数,否则可以存在隐式转换。
非引用形参将复制实参值,非引用return将复制return的东西。即使定义了其他构造函数,也会合成复制构造函数【能够复制类中的数组】。类成员有指针一般需要显示定义复制构造函数。
声明而不定义成员函数是合法的,但是使用将导致链接失败。将复制构造函数声明为private可防止复制。定义了复制构造函数,也必须定义默认构造函数。
重载赋值操作符=,隐含的第一个参数this。复制构造函数、赋值操作符、显示析构函数【虚空不算】一般同时出现。合成析构函数并不删除指针成员指向的对象。即使编写了自己的析构函数,合成析构函数仍然运行。
默认构造函数不全,会调成员的默认构造函数,复制构造函数不全就不行了。
使用计数是管理智能指针类的通用技术。
重载操作符:保留字operator后面接需要定义的操作符符号,返回类型和参数表和其它函数一样。只能重载已有的操作符,只针对类类型,最好重载原本对类类型无意义的操作符。
使用算法sort等时会假定一些操作符(<)存在,此时要为类型定义重载操作符。重载操作符如果是成员函数,左操作数必须是该类的对象【一定是this】。
用函数或类操作某个类的数据可设置其为友元。== <的逻辑定义如果不一致,不定义<比较好。()是调用操作符,有这个的类称为函数对象,行为类似函数。函数对象作为算法实参,比函数更灵活。标准库中有几个函数对象。
函数对象的函数适配器:绑定器 bind1st将给定值绑定到二元对象函数第一个实参 bind2nd 第二个实参。 求反器 not1 not2 count_if find_if
转换操作符:operator type() type表示内置类型名,类类型名或别名。【operator int(); //重载类型转换操作符,可以做到int i; Integer it; i = it; //it直接转为int类型,然后赋值给i 例如:Integer::operator int() {return data;data是Integer的私有成员}】
下一篇
举报
领券