学习C++的一些笔记(三)

61.运算符重载前置++跟后置++有区别,前置++参数列表为空,后置++参数列表有参数,并且返回值也不同,前置返回一个引用,后置返回一个对象,如,
Complex& operator(), Complex operator(int) ,其中int不是代表要传入一个int型变量,而是一种强制标识
62.成员函数对双目运算符重载,因为含有this指针,所以参数列表里只有一个函数,如Complex operator +(const Complex &rhs),只能对类或者枚举类型进行运算符重载。优先级和结合性固定的,不在具备短路求值的特性,不能臆造并重载一个不存在的操作符。对于算术操作符,相等操作符、关系操作符和位操作符,最好定义为非成员函数
63.C++空类默认产生,1.默认构造函数。2.复制构造函数。3.析构函数。4.*。5.&
64.深浅拷贝,浅拷贝是创建了一个对象用一个现成的对象初始化它的时候只是复制了成员(简单赋值),而没有拷贝分配给成员的资源(如给其指针变量成员分配动态内存)。深拷贝是当一个对象创建时,如果分配了资源,就需要定义自己的拷贝构造函数,使之不但拷贝成员也拷贝分配给他们的资源
65.输出操作符,不能申明为一个成员,因为为一个双目运算符,若把作为成员函数,的第一个操作数为this指针,与操作数为流对象冲突
66.is.get() 读取一个字符并返回,这个字符
67.一个类,如果重载了函数调用operator(),就可以将该类对象作为一个函数使用,这样的类对象也称为函数对象,函数也是一种对象
68.可以通过operator int() 这种类似操作符重载函数的类型转换函数来实现由自定义类型向其他类型的转换。如将point类转换为int类型等。如,operator 目标类型名()。需注意:1.转换函数必须是成员函数,不能是友元形式。2.转换函数不能指定返回类型,但在函数体内必须以return语句以传值的方式返回一个目标类型的变量3.转换函数不能有参数
69.全局变量默认在匿名命名空间(::x,这种格式)
70.一个类可以定义在另一个类中,这种叫做嵌套类,嵌套类声明为B::A
71.写时拷贝,即需要拷贝时再进行拷贝。多个字符串指向同一内存地址,当其中一个字符串要修改的时候,才拷贝原来的内容,到一个新的空间。采用引用计数,存放在,字符串“\0”,后面。引用计数大于0时,代表内存是共享的
72.  c_str()函数能求出string在内存中的地址,但如果要输出这个地址,只能用printf,如果用cout的话,会输出该地址里的内容
73.string类只有当发生复制的时候才共享内存
74.STL(标准模板库)由容器,迭代器,容器适配器,算法组成
75.对容器插入元素可以用insert,插入位置为迭代器指向位置,且迭代器指向插入的最后一个元素。insert函数有3个参数(insert(it, 2,3 ),其中it为迭代器,2,为插入个数,3为插入元素)
76.对容器删除元素可以用erase
77.容器内的东西都是独立的副本
78.list在任何位置增删元素都是固定的。因为通过迭代器访问
79.set(集合)只包含关键字,无值的概念,所有值都唯一,而multiset则允许多个相同关键字,不支持下标访问。
80.map(图)是关键字——值,所有值都唯一,而multimap则允许多个关键字但不支持随机访问。可使用pair<class T1, class T2>来表示map容器中形如“关键字—值”的每个元素,并且pair中的T1,T2都是public可以直接访问,如果关键字相同则会忽略。map随机访问下标里面的元素是关键字,而不是第几位
81.对于set跟map的插入一般用pair<iterator, bool> ob.insert(t),如果ob中不包含t,bool为true,插入t,如果包含,bool为false,不插入。不管是否插入iterator都指向关键字和t相同的元素,也可以使用insert(i,j)函数,即插入从i到j区间的元素。
82.删除容器中元素,有1.ob.erase(keyword)(直接删除关键字为keyword的元素,返回删除元素的个数)2.ob.erase(p)(删除迭代器p所指向的元素,p必须存在且不为end),3.ob.erase(q1, q2)(删除[q1,q2),区间内的所有元素)4.clear(void)(删除容器内所有元素,等价于 ob.erase(ob.begin(), ob.end()))(end是指向最后一个元素的下一个位置)
83.流迭代器,是把输入/输出流当容器看待,头文件必须为<iterator>。输出流,ostream_iterator<int, char>osi(cout, “\n”),其中\n为分割符,即读到\n停止。
输入流迭代器,istream_iterator<int, char>isi(cin)
84.泛型算法,头文件为<algorithm>和<numberic>具体参见www.cppreference.com
85.容器适配器可以看作是对容器的封装,使其实现某种特定的功能。有3种,stack,queue和priority_queue
86.函数适配器,有3种,1.绑定器(bind1st(函数对象,指定值),将指定值绑定到函数对象第一个参数上,bind2nd(函数对象,指定值),将指定值绑定到函数对象第二个参数上)2.否定器(not1()用于逆转1元断言,not2()用于逆转2元断言)3.成员函数适配器(mem_fun(), mem_fun_ref())
87.C++中处理异常是用try,catch。
88.RAII类常见特征,1.在构造时初始化资源。2.析构时释放资源。3.一般不允许赋值或者赋值。(因为是资源,所以就不能被复制或者赋值,这叫对象语意)4.提供若干访问资源的方法。RAII本质上是用栈管理资源,因为栈对象在离开作用域时,会自动调用析构函数
89.智能指针是存储指向动态分配(堆)对象指针的类,在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象
90.函数模板的格式template<class 形参名,class 形参名> 返回类型 函数名(参数列表),其中class可以用typename代替
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值