)
目录一、类的初步理解1.引入类2.类的定义3.类的访问限定符二、类和对象的关系1.类的实例化2.类对象的存储方式3.类的大小三、this 指针1.this指针的性质2.成员变量命名规则的建议只是建议一、类的初步理解1.引入类在C语言中我们曾学习过结构体C语言的结构体中只能定义变量而在C中结构体不仅可以定义变量而且可以定义函数、自定义类型等。只不过在C中更喜欢将关键字 struct 替换为 class如上便是一个包含了变量和函数的类。2.类的定义简化上图class为定义类的关键字Stack为类的名字可以按需要自行取名{ }中为类的主体{ }后面的分号不能省略。类主体中的内容称为类的成员类中的变量称为类的属性或成员变量类中的函数称为类的方法或者成员函数关于类定义的方式①类的成员变量、成员函数的声明和实现全部放在类的主体中。不推荐成员函数如果在类中定义编译器可能会将其当成内联函数处理②类的成员变量和成员函数的声明放在类的主体中类整体放在头文件而函数的实现放在实现文件中示例如下注在类外实现成员函数时需要使用域作用限定符::来指明该成员函数属于哪个类。关于用 struct 和 class 定义类的区别struct定义类类的访问权限默认为公有class定义类类的访问权限默认为私有这里结合下文访问限定符会更好理解。3.类的访问限定符类的访问限定符有三个① public公有②protected保护③private私有对访问限定符的理解①public修饰的成员在类外可以直接被访问②protected和private修饰的成员在类外不能直接被访问③访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止如果后面没有访问限定符作用域就到类结束为止。④class的默认访问权限为privatestruct为public(因为struct要兼容C语言)注意访问限定符只在编译时有用当数据映射到内存后没有任何访问限定符上的区别访问限定符的作用用类将对象的属性成员变量与方法成员函数相结合以完善对象通过访问限定符有选择性的将其接口提供给外部的用户使用以实现封装一方面可以隐藏类的实现细节另一方面也能让用户更方便地使用类。二、类和对象的关系对象是类的实例化1.类的实例化理解这个问题我们需要先理解类是什么可以将类理解为一张图纸而对象是建筑物该图纸包含建设该建筑物的基本参数以及方法凭借这张图纸我们可以建设多个建筑物总结如下①类中的定义的变量和函数声明只是声明不能存储数据就像图纸上的参数和方法未实际建设前不会消耗实际空间②通过类实例化出的对象才会占用实际的物理空间来存储类成员③一个类可以实例化出多个对象2.类对象的存储方式结论实例化出的每个对象只保存成员变量而成员函数存放在公共的代码段原因同一个类实例化出的不同对象中的成员变量会因为初始化的数据不同而不同需要分别存储而成员函数各个对象都是相同的如果每个对象都存储一份未免浪费空间所以成员函数单独存放在公共代码段。3.类的大小结论一个类的大小实际就是该类中”成员变量”之和但是要注意内存对齐不了解内存对齐的朋友可以移步【结构体】内存对齐-CSDN博客注空类比较特殊编译器给了空类一个字节来唯一标识这个类的对象表示对象存在但不存储有效数据。三、this 指针1.this指针的性质① this指针的类型类类型* const即不能再给this指针一个新的指向以Date类为例②this指针只能在“成员函数”的内部显式使用不能在形参和实参显式传递③this指针本质上是“成员函数”的形参当对象调用成员函数时将对象地址作为实参传递给 this形参所以对象中不存储this指针。这里不需要我们自己显式传参④ this指针是“成员函数”第一个隐含的指针形参一般情况由编译器通过ecx寄存器自动传递不需要用户传递注this存储的是该对象的地址比如0x7ffd...*this代表这个对象本身注2.成员变量命名规则的建议只是建议这里一眼看过去都是year不好区分可读性差不推荐推荐的写法或者这样推荐这两种写法的原因成员函数具有隐含的this指针可以通过this指针访问对应的成员变量但成员函数也有自己的变量比如形参如果不加以区分两者就有同名的可能会降低可读性。注当然其他方式也是可以的主要看公司要求或是个人习惯。感谢阅读本文如有错漏之处烦请各位斧正。