当前位置: 首页 > news >正文

淄博市沂源县建设局网站主页免费下载

淄博市沂源县建设局网站,主页免费下载,嘉兴招聘网,wordpress设置视频宽度在本篇中将会介绍一个很重要和很基础的Cpp知识——类和对象。对于类和对象的篇目将会有三篇#xff0c;本篇是基础篇#xff0c;将会介绍类的定义、类的访问限定符符和封装、计算类和对象的大小、以及类的 this 指针。目录如下#xff1a; 目录 1. 关于类 1.1 类的定义 2 类…         在本篇中将会介绍一个很重要和很基础的Cpp知识——类和对象。对于类和对象的篇目将会有三篇本篇是基础篇将会介绍类的定义、类的访问限定符符和封装、计算类和对象的大小、以及类的 this 指针。目录如下 目录 1. 关于类 1.1 类的定义 2 类的访问限定符及封装  1.3 类的实例化——对象 3 类与对象的空间大小 3.1 结构体内存对齐规则 4. this 指针 4.1 this 指针的特性  1. 关于类 首先需要先区分两个名词面向对象、面向过程。面向对象的思想主要发挥在Cpp中而面向过程的思想主要发挥在C语言中。         面向过程关注过程分析问题的每一个步骤然后提高函数对每一个步骤都逐一解决。就好像点外卖首先我需要打开外卖app然后决定要吃什么然后找到对应的店铺接着下单等待到餐以及去取餐。         面向对象关注的是对象将一件事情拆分为不同的对象依靠对象之间的交互完成。比如点外卖分为了三个对象我、外卖员、商家。我负责下单外卖员负责送外卖商家负责做餐。将一件事情先分给不同的对象然后让对象之间相互配合完成这件事情。 1.1 类的定义 在C的类与C语言中的结构体很相似都用来同一定义我们的自定义类型变量。但是在Cpp中的类不仅仅可以定义成员变量还可以定义成员函数。         对于类的定义如下 class ClassNmae {//成员函数 and 成员变量 };struct ClassName {//成员函数 and 成员变量 };         其中 class、struct 为定义类的关键字ClassName为类的名字{} 中为类的主体注意类定义结束时后面分号不能省略。对于 class 和 struct 都可以用于定义类比较常用的是 class将会在下文中介绍这两者的区别。         对于类体中内容称为类的成员类中的变量称为类的属性或者成员变量类中的函数称为类的方法或者成员函数。         对于成员函数的声明定义方法1.声明和定义放在类体中2.声明与定义分离。         1.声明与定义放在类体中 class Stack { public:void Init() {_a (int*)malloc(sizeof(int) * 4);_capacity 4;_top 0;}void Push(int x) {if (_top _capacity) {int newCapacity 2 * _capacity;int* tmp (int*)realloc(_a, sizeof(int) * newCapacity);if (tmp nullptr) {perror(realloc failed:);exit(1);}_a tmp;_capacity newCapacity;}_a[_top] x;}void Pop() {assert(_top ! 0);_top--;}//... private:int* _a;int _top;int _capacity; };         2.声明与定义分离 // Stack.h class Stack { public:void Init();void Push(int x);void Pop();//... private:int* _a;int _top;int _capacity; };// Stack.c void Stack::Push(int x) {if (_top _capacity) {int newCapacity 2 * _capacity;int* tmp (int*)realloc(_a, sizeof(int) * newCapacity);if (tmp nullptr) {perror(realloc failed:);exit(1);}_a tmp;_capacity newCapacity;}_a[_top] x; }void Stack::Init() {_a (int*)malloc(sizeof(int) * 4);_capacity 4;_top 0; }void Stack::Pop() {assert(_top ! 0);_top--; }         如上就是成员函数的声明定义方法通常更推荐使用第二种将声明与定义分离不过需要定义与声明分离之后的定义形式。 2 类的访问限定符及封装 Cpp实现封装的方式用类将对象的属性与方法结合在一块让对象更加完善通过访问权限选择性的将其接口提供给外部的用户使用。         访问限定符public公有、private私有、protected保护。         访问限定符说明         1.public修饰的成员在类外可以直接被访问。         2.protected、private修饰的成员在类外不能直接被访问。         3.访问权限的作用域从该访问限定符出现的位置开始到下一个访问限定符出现为止若后面没有访问限定符则到 } 结束。         4.class 的默认访问权限为 privatestruct 为public         面向对象的三大特性封装、继承、多态。本篇将主要介绍封装。         封装将数据和操作数据的方法进行有机结合隐藏对象的属性和实现细节仅对外公开接口和对象进行交互。简单来说就是将类中的部分变量进行隐藏使用private修饰仅仅放出一些变量public修饰用于和类外的变量进行交互。         如下         图中显示并不能直接访问由 private 修饰的变量只能通过由 public 修饰的成员函数来进行对对象进行操作。         类的作用域我们既然将类进行了封装那么对于类就存在一个新的作用域。类的所有成员都在类的作用域中。类外定义成员时需要使用 “ : : ” 作用域操作符指明成员属于哪一个类域。 1.3 类的实例化——对象 用类类型创建对象的过程叫做类的实例化。         类是对对象进行描述的类似于一个模板一样的东西我们可以看见一个用类创建出来的对象有哪些成员变量和成员函数。对于类来说并不占有空间。         所以一个类可以实例化多个对象实例化出来的对象占据实际的物理空间存储类的成员。如下图         使用 Stack 类定义出两个对象。 3 类与对象的空间大小 在C语言中我们计算时间结构体的大小使用的是内存对齐规则那么我们在Cpp中该使用什么样的办法计算一个类或对象所占空间大小呢我们在Cpp中同样使用的是内存对齐规则不过Cpp中的内存对齐规则和C语言中的内存对齐规则存在些许不同比如在Cpp中不仅仅存在成员变量还存在成员函数成员函数的大小该如何计算。         我们先计算一下对于以上 Stack 的一个对象的大小         如上图所示计算出来的结果显示为16计算的大小也刚好是 Stack 中成员变量的大小并没有计算成员函数的大小。说明在Cpp中的内存对齐规则中并不会计算成员函数的大小。         对于Cpp中的成员函数来说并不是每个实例化的对象都存在独立空间的成员函数。成员函数是所有同样类的对象的共享成员函数。成员函数的存放在一个公共代码区。         但是若一个类只存在成员函数而没有成员变量或则成员函数和成员变量都没有呢那这个类的大小是0吗如下         如上图所示当类只存在成员函数而没有成员变量时计算出来的空间为1。那是因为在Cpp的标准中编译器给空类一个字节来唯一标识这个类的对象。 3.1 结构体内存对齐规则 1. 第一个成员在与结构体偏移量为0的地址处。         2. 其他成员变量要对齐到某个数字的整数倍的地址处。注对齐数 编译器默认的一个对齐数 与 该成员变量大小的较小值         3. 结构体的总大小最大对齐数的整数倍所有成员的类型的最大者和编译器默认对齐数的较小值         4. 若嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数的整数倍。 4. this 指针 如下图我们在成员函数中的变量名前增加了一个 this 指针         为什么我们加入了一个 this 指针我们的程序还能正确的运行呢         这和我们调用成员函数相关当我们在调用成员函数时我们并不需要将成员变量传入成员函数中而是直接调用如图中的 Print 函数成员函数就可以根据对应的成员变量而调用。这是因为         Cpp编译器给每个“非静态的成员函数”增加了一个隐藏的指针参数 this 让该指针指向当前对象函数运行时调用该函数的对象在函数体中所有“成员变量”的操作都是通过该指针去访问。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。 4.1 this 指针的特性  成员函数中的 this 指针存在一些特性以及使用时的细节将在以下给出。                1. this 指针的类型类* const即成员函数中我们不能给 this 指针赋值。         2. this 指针只能存在于成员函数之中并不能在成员函数外使用。         3. this 指针本质上是“成员函数”的形参当对象调用成员函数时将对象地址作为实参传递给 this 形参。所以对象中不存在 this 指针。         4. this 指针是“成员函数”第一个隐含的指针形参一般情况下由exc寄存器自动传递不需要由用户来操作。         可以理解这两个函数是相同的但是并不能写成第二种第二种会报错。         this 指针的使用细节如下         如上图所示当我们在一个类中定义了两个 Print 函数但是真正运行起来时只有 Print1 可以正常的运行而 Print2 并不能正常的运行。这是因为         当我们执行 Print1 时成员函数中的 this 指针直接拷贝了 nullptr然后执行 Print1 中的语句。但是当执行 Print2 时this 指针拷贝了 nullptr然后在接下来的语句中直接调用了 nullptr 处的 _a 变量此处的变量并没有被开发所以运行起来会报错。
http://www.pierceye.com/news/624954/

相关文章:

  • 专业做刀具网站的公司单页面网站模板
  • 企业网站制作及cms技术wordpress站点 HTML
  • 网络宣传网站建设制作加盟网络推广方案怎么写
  • 花店网站建设毕设介绍wordpress批量导入txt
  • 上海市网站建设定制百度推广怎么优化关键词的质量
  • 建设工程质量检测公司网站html5 响应式音乐网站
  • 网站建设托管推广海报中文域名做的网站
  • 临沂专业网站建设公司哪家好网站建设的网页
  • 当牛做吗网站源代码分享百度云帝国怎么做网站
  • 简约网站欣赏做美食网站赚钱吗
  • 一叶子网站建设目标教育平台oss做视频网站
  • 购物网站开发流程图wordpress 批量注册
  • 如何做网站优化的内容google网站推广
  • 网站模版亮点北京电商网站开发费用
  • 南昌专业的企业网站建设公司wordpress源码在哪
  • 农家院做宣传应该在哪个网站营销代码查询
  • 大型企业网站设计案例晋江做网站的公司哪家好
  • 海外模板网站有哪些全国网页设计大赛
  • 网站设计常州注册公司没有地址怎么弄
  • 注销建设工程规划许可证在哪个网站wordpress+Apache升级
  • 视频网站如何做盗链青岛商城网站开发
  • 网站主色调googleapis wordpress
  • 作网站番禺区网络推广渠道
  • app开发网站排行app制作平台排行
  • 盐城网站建设找哪家好个人如何做短视频网站
  • 域名进行网站备案吗2023年重启核酸
  • 为什么几年前做的网站视频看不了wordpress图片标签
  • 做照片用的视频模板下载网站好网站源代码购买
  • 网站rss生成上海网页网络技术有限公司
  • 白山北京网站建设遂宁网站优化