目录
一:类的引入
二:类的两种定义方式
1.声明和定义都放在类中
2.类声明放在.h文件中,将成员函数定义放在.cpp文件中
三:类的访问限定符及封装
1.访问限定符
2.使用规则
3.c++中struct和class的区别是什么
4.封装
四:类的实例化
五:计算类的大小
1.类的大小的计算同结构体一样,遵循对齐规则
2.每个对象的成员变量是不一样的,需要单独存储
3.每个对象调用成员函数是一样的,放到共享公共区域(代码段)
4.如果只有成员函数或者空类的话,大小是1,这1byte不存储有效数据,只是用来占位,标记对象被实例化定义出来了
六:this指针
1.this指针存在哪里
2.空指针问题
接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
一:类的引入
1.因为c++兼容c语言,所以在c语言结构体的基础上发展为可以在结构体内部声明和实现函数,并用class代替struct关键字
在访问时便要定义对象,然后用结构体访问成员变量那样去访问成员函数 和成员变量
二:类的两种定义方式
1.声明和定义都放在类中
注:成员函数在类中,则会被认为内联函数
2.类声明放在.h文件中,将成员函数定义放在.cpp文件中
此时成员函数需要加类名::
三:类的访问限定符及封装
1.访问限定符
public(公有),private(私有),protected(保护)
2.使用规则
1.public修饰的成员在类外可以直接访问
2.protected和private修饰的成员在类外不能直接被访问
3.访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4.如果后面没有访问限定符,作用于就到}即类结束
5.class的默认访问权限为private,struct为public(因为struct要兼容c)
3.c++中struct和class的区别是什么
c++要兼容c语言,所以c++中的struct可以当作结构体使用。另外c++中struct还可以用来定义类,和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义的类默认访问权限是private.在继承和模板参数列表位置,也是有区别的
4.封装
面向对象的三大特性:封装,继承和多态
封装: 将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互
四:类的实例化
简单来说就是开空间
五:计算类的大小
1.类的大小的计算同结构体一样,遵循对齐规则
可以看出成员变量在类中,成员函数不在类中
2.每个对象的成员变量是不一样的,需要单独存储
3.每个对象调用成员函数是一样的,放到共享公共区域(代码段)
4.如果只有成员函数或者空类的话,大小是1,这1byte不存储有效数据,只是用来占位,标记对象被实例化定义出来了
六:this指针
如果我们同时定义两个对象,那么再调用成员函数时如何确定调用准确,或者在用成员函数初始化时,成员变量只是声明,没有定义,无空间,是如何接收值的呢,这些就得用到this指针来说明了
从上面例子就可以看出其实在底层实现上是传定义的对象的地址的,当然空间就是对象的空间了
在实际过程中不能写this指针,它是由编译器处理完成的
1.this指针存在哪里
存在栈中因为他是隐含形参/vs下面是通过ecx寄存器
2.空指针问题
1.由上面知,成员函数是不在类中的,调用时会直接转化为指令,去代码段找,并没有对ptr指针直接解引用 ,而ptr指针是用来规定域,不去全局找,而是去指定的域中寻找;ptr指针本身作为this指针传过去
2.Init函数中会对this指针进行解引用,会报错,其他两个并没有对传过去的this指针进行解引用,正常运行
3.最后尤其空指针调用成员函数,不一定报错,得看成员函数中对传过去的this指针有无解引用