热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《C++类中的基本常识》

【this指针】正常情况下,在类中函数编写的时候就会出现一个非常尴尬的问题就是,我们参数名和类中名字是相同的,这个时候就会出现一个特别尴

【this指针】

正常情况下,在类中函数编写的时候就会出现一个非常尴尬的问题就是,我们参数名和类中名字是相同的,这个时候就会出现一个特别尴尬的问题,就是我们傻傻分不清这个这个成员是这个本身类中的还是参数类中的,这个时候C++中通过引入this指针在解决这个问题

即:C++编译器给每个“非静态的成员函数增加了一个隐藏的指针参数this,让该指针指向当面对象(函数运行时调用该函数的对象),在函数体中所有的“”成员变量”的操作,都是通过该指针去访问。只不过所有的用户都是透明的,既不需要来传递,编译器自动完成。

也就是:this指针这玩意是编译器自动生成的,不需要你手动生成了,你也这可以理解为这个this就是这个类本身。

【this指针的特性】

1.this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。

2.只能在“成员函数内部使用”

3.this指针本质上是“成员函数”的形参,当对象调用成员函时,将对象地址作为实参传递给this形参,所以对象中不存储this指针,所以在类的成员中你找不到这玩意。

4.this指针是“成员函数”第一个隐含的指针形参,一般情况下由编译器通过ecx寄存器自动传递,不需要用户传递。

【类的6个默认成员函数】

如果一个类总什么成员都没有,简称空类

空类中真的什么都没有吗?并不是,任何类在什么都不写的时,编译器会自动生成以下六个默认成员函数。

默认成员函数:用户没有显示显现,编译器会生成的成员函数称为默认成员函数。

【构造函数】

 特性:构造函数是特殊的成员函数,需要注意的是,构造函数虽然名字叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。

其特征如下:

1.函数名和类名相同

2.无返回值

3.对象实例化时编译器自动调用对应的构造函数

4.构造函数可以重载

tips:如果类中没有显示定义构造函数,则编译器会自动生成一个无参的默认构造函数,一旦用户显示定义,编译器将不在生成。

这个时候聪明的小朋友就要问了,为啥我有了编译器自带的构造构造函数,但是我初始化一个类最后的结果依旧是一个随机值?也就是说默认构造函数并没有用?

C++把类型分为内置类型和自定义类型,内置类型就是语言提供的数据类型,如:int,char....,自定义类型就是我们使用class/struct/union等自己定义的类型,而C++中编译器自己生成的构造函数对内置类型不做处理,但是对自定义类型调用自定义类型本身的构造函数。

注意:可能写出C++的大佬认为这个构造函数不对内置类型做出处理属实有点反人类,于是在C++11中对内置类型成员不初始化的缺陷,又打了补丁,即:内置类型成员变量在类中声明时可以给出默认值。置于为何是又,这个倒构造函数的细解就知道了。

默认构造函数的类型:

无参的构造函数和全缺省的构造函数都被称为默认构造函数,并且默认构造函数只能有一个!!!

注意:无参构造函数,全缺省构造函数,我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。

【析构函数】

概念:构造函数告诉我们一个对象是咋来的,那么析构函数函数就是告诉我们一个对象时咋没的

析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的,而对象在销毁时会自动调用析构函数,完成对象资源中的清理工作。

特性:

1.析构函数名是在类名前面加上字符“~”。

2.无参数无返回类型

3.一个类只有一个析构函数,若未显示定义,系统会自动生成默认的析构函数,注意:析构函数不能重载。

4.对象声明周期结束时,C++编译系统自动调用析构函数

5.和构造函数相反,析构函数默认只能将内置类型给重新归零,但是对申请的内存资源不做处理,对自定义类型则会调用自定义类型自己的析构函数。

tips:当类的成员没有向系统申请资源的时候,默认的析构函数就已经够用了,但如果内部成员调用了系统资源,就要你自己去手动编写这个析构函数了。


推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
author-avatar
DaybreakCP
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有