C++Primer(第五版)学习笔记——成员函数和非成员函数(第七章)

首先,理清类的实现和接口的区别:

书上说:类的接口包括用户所能执行的操作,类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。

个人这么理解:接口是用户可以看到的与类有关的部分,实现是用户看不到的部分

作为接口组成部分的非成员函数,他们的定义和声明都在类的外部。(接口也可以是public的成员函数?)

成员函数的声明必须在类的内部,但是定义可以在类外。(定义时成员的名字必须包含它所属的类名,使用作用域运算符)

定义在类内部的函数是隐式的inline函数。

引入this:

我们调用一个对象的成员函数时,会隐式的传入一个参数给隐式形参this,this的值是该对象的地址。

任何对类成员的直接访问都被看做this的隐式引用。

任何定义名为this的参数或者变量的行为都是非法的。

this是一个常量指针(默认情况下指向非常量)。(因为this从生成到销毁所指向的对象是不变的)

我们可以通过在成员函数的参数列表之后的const关键字,来将this声明成指向常量的常量指针,这样的成员函数被称作常量函数。

常量对象,以及常量对象的引用或指针都只能调用常量成员函数(只能用常量初始化指向常量的指针)

编译器在编译一个类的时候,首先编译成员的声明,然后才轮到成员函数体。

如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一头文件内。

在这里遇到一个问题:函数的声明和定义的分离是如何实现的

编译器会遍历所有文件。

编译器遇到声明的时候,并没有给该函数分配内存,仅仅只是记录一下这个函数被声明了。当遇到定义时,编译器首先检查之前有没有这个函数的声明,如果有,则按照定义对该函数分配内存。


你可能感兴趣的:(C++Primer(第五版)学习笔记——成员函数和非成员函数(第七章))