下面将此部分的知识点罗列梳理,方便后续复习回顾。
1. 类模板
2. 内联函数inline:
能内联尽量内联,可以提升程序效率;但最终是否按照内联处理是由编译器决定的。
- 类内:类内提供定义的函数默认为内联函数,不需要加inline
- 类外:加inline限定字
3. 构造函数
名称与类名相同,可以带参数,参数可以有默认值,无返回类型(不需要),更推荐使用初始化列表而不是赋值操作。
构造函数可以有多个(函数重载),但相互之间不能有歧义
特殊情况:private构造函数->不允许外界创建对象,singleton
4. 析构函数
不带指针的类一般不需要写析构函数,调用自带的默认析构函数
5. 常量成员函数
在函数后、花括号前加const
定义一个常量成员函数实质上是把this指针在该成员函数内定义成指向常量的常量指针,由此,常量成员函数体内this指针不能重新定向,它总是指向调用该常量成员函数的对象,而且,该对象的数据成员也不可以被修改
const限定字应加尽加
6. 参数传递
- 按值传递:数据整包传递,压入栈中。弊端:数据量可能会很大。
- 引用传递:引用的本质其实是指针,可以加const限定。函数返回值也可以传递引用
tip: 可以的情况下,尽量传递引用。
不能返回引用的情况:函数返回local临时对象
传递者不需要考虑接收者是否以reference形式接收
7. 友元 friend
可通过友元自由取得friend的私有数据成员,比通过函数访问更快。
相同类的各个对象互为友元
8. 操作符重载(成员函数)
operand operator operand类型的运算:操作符作用于左值
成员函数的第一个参数默认为this指针,指向调用者,不需要写出来
在连续运算(操作符连串使用)的情况下,需要返回引用。
9. 操作符重载(非成员函数,无this指针)
返回的绝不是reference而是value,因为返回的必定是local object(在函数中创建,离开函数生命周期就结束了)
typename():创建无名称的临时对象
-的歧义:在类外定义的话,只可能是取相反数
取正的情况下可以传回引用(就是原来的值,不需要创建临时对象)
<<的重载:作用于左侧,只能写成全局函数,不能写成类的成员函数,否则会作用于右边,不符合常规使用习惯;参数ostream&不能加const修饰