本文首发于个人博客
类
C++中可以使用struct、class来定义一个类
struct和class的区别
- struct的默认成员权限是public
- class的默认成员权限是private
- 实际开发中,用class表示类比较多
| 1 | struct Person { | 
等价于
| 1 | class Person { | 
操作类
- 对类进行操作。我们有两种方式
| 1 | Person person; | 
汇编分析
struct
| 1 | struct Person { | 
反汇编结果如下
| 1 | pushq %rbp | 
class
| 1 | class Person { | 
反汇编结果如下
| 1 | pushq %rbp | 
可以看到无论是struct还是class。汇编代码完全一样
- 实际开发中,用class表示类比较多
this
this是指向当前对象的指针
- 对象在调用成员函数的时候,会自动传入当前对象的内存地址
例如
| 1 | class Person { | 
需要注意的是:不能用this.age来访问成员变量。因为this是指针。
指针访问对象成员的本质
下面代码最后打印出来的每个成员变量值是多少?
| 1 | class Person { | 
第一感觉是
id = 40 age = 50 height = 30
然后用编译器运行起来的结果是
id = 10 age = 40 height = 50
原因
- 因为指针p实际指向的是person.age的地址,但是(Person *)&person.age;欺骗编译器是指向person。
- 64位下person中每个成员变量都是Int类型,占用4个字节。
- 当我们修改p->id = 40;的时候,实际上修改的是age指向的内存空间。
拓展
打印的时候不用点语法,使用指针呢?如下
| 1 | p->display(); | 
其结果为:其中height 的值是不确定的
id = 40 age = 50 height = 1
- 是因为,使用指针访问的时候,传入的this就是偏移了4个字节的内存空间,打印的id实际上是age,打印的age实际上是height,打印的height实际上是其他空间的数据。