内联函数:

函数在class里面定义(侯老师的说法)

好处:快,好

注意:如果函数过于复杂,即使加了inline,编译器也无法把它识别为inline函数

C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。

对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。

如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符。

在类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。

访问级别

C++知识点归纳(二)_内联函数

一般情况,数据和一些内部使用的函数都被定义为private,而想让外界调用的函数则被定义为public

由上述结果可以,想要访问私有变量,只能通过调用公有的方法来实现

注意:private和public没有严格的摆放顺序

构造函数

C++中,当创建一个对象时,有一个函数就会自动被调用,即为构造函数。

C++知识点归纳(二)_成员函数_02

注意:
1. 构造函数名称和类的名称一定要相同
2. 构造函数没有返回值类型(因为构造函数就是为了创造对象,没必要写返回值类型)
3. 构造函数独有的操作,图片中初值列、初始列这一行赋值操作,其实是和****{}****里面的赋值操作等同,但是这样处理有一个好处,
**数值的设定一般有两个阶段:1、初始化2、赋值**
如果直接在{}里面操作(图片右上角),就相当于放弃了初始化的操作,导致时间和效率的落后,
**所以虽然结论相同但是过程不一样。**
4. 你不可能直接调用构造函数
5. 图片中这种不带指针的类**多半**不用写析构函数

重载

overloading:相同函数名称,却一个以上

C++知识点归纳(二)_c++_03

 1. 图片中的两个real函数表面同名,但是其实不同名 
2. 函数重载常常发生在构造函数中
3. 图片中的1和2两个构造函数是冲突的,都存在默认值

把构造函数放在private中

C++知识点归纳(二)_传引用_04

单例模式:指一个类只允许有一个实例

设计的思路就是把类的构造函数声明为private,然后提供一个公共的接口使外部能够访问到类的实例,如上图

常量成员函数

C++知识点归纳(二)_成员函数_05

class中的函数分为两种:

  1. 会改变数据 内容
  2. 不会改变数据内容(在函数后面加上const)

注意:右下角图片,当在class前面加const时,如果类中的函数后面没有const会出错

类中const放在成员函数的前后有什么区别????

答:const T & operator [] (int i)const;
后面的const是修饰隐藏的this指针的,意思是类的成员变const,不可修改
前面的const 是指函数返回值是const类型的。

简言之:一个是成员变量,一个是返回值类型

参数传递

C++知识点归纳(二)_构造函数_06

  • 传引用(四个字节)就相当于传指针那么快,在参数传递的过程中尽可能都是传引用
  • 传引用的时候如果不希望被改变,可以加上const使不可改变;
  • 当某一些变量字节很小的时候可以考虑传value;

返回值传递

C++知识点归纳(二)_传引用_07

返回值的传递也尽量传引用

友元函数

C++知识点归纳(二)_成员函数_08

友元函数可以直接拿private中的数据,友元函数相当于打开了封装的大门

​相同类的各个对象互为友元​

C++知识点归纳(二)_传引用_09

Class外的各种定义

C++知识点归纳(二)_构造函数_10

  • ​如果两个复数类型的相加是在**临时变量**中进行的,执行完会被销毁​​,​​这种情况不能使用传引用的操作;​
  • 而上图中的加法操作是在第一个参数的地址空间中进行的,可以使用传参数(​​注意是这种情况可以传引用​​)

操作符重载(​​再看看​​)

C++知识点归纳(二)_内联函数_11

注意

  • 这里是类外成员函数,需要在函数前面加上类名complex
  • 成员函数分为类内和类外,并且需要注意一下和inline函数的区别

C++知识点归纳(二)_构造函数_12

C++知识点归纳(二)_内联函数_13

C++知识点归纳(二)_成员函数_14

这里就是前面提到的不能传引用的情况,这里的两数相加会创建临时对象,离开这个函数就会死亡,所以不能把reference传出去,一传出去,当临时对象死亡时,外界就无法用到这个引用了,所以图片的中蓝色部分一定要return by value。

临时对象:**typename()**就是上面的三个return的后面部分

右图中的黄色部分执行到下一行就会不见了,销毁

C++知识点归纳(二)_c++_15

上面的“+”这块应该采用return by reference更好

:传参或者传返回值采用reference速度更快

C++知识点归纳(二)_构造函数_16

上图中“<<”这种特殊的操作符只能写成非成员函数(也就是全局的这种写法)这种形式