热门标签 | 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:当类的成员没有向系统申请资源的时候,默认的析构函数就已经够用了,但如果内部成员调用了系统资源,就要你自己去手动编写这个析构函数了。


推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • C++构造函数与初始化列表详解
    本文深入探讨了C++中构造函数的初始化列表,包括赋值与初始化的区别、初始化列表的使用规则、静态成员初始化等内容。通过实例和调试证明,详细解释了初始化列表在对象创建时的重要性。 ... [详细]
  • 文件描述符、文件句柄与打开文件之间的关联解析
    本文详细探讨了文件描述符、文件句柄和打开文件之间的关系,通过具体示例解释了它们在操作系统中的作用及其相互影响。 ... [详细]
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社区 版权所有