C++构造函数详解

news/2024/7/8 5:51:46

目录

如果对你有帮助,点个赞吧!

构造函数:

1、函数名与类名相同

2、无返回值

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

4、构造函数可以重载

5、如果我们没有显式定义构造函数,编译器会自动生成一个构造函数,即默认构造函数

6、默认构造函数对基本类型不做处理,对自定义类型会自动调用对象类的构造函数

7、默认构造函数共有三种形式:无参数构造函数、全缺省构造函数、编译器自动生成的默认构造函数


构造函数:


1、函数名与类名相同


2、无返回值


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


4、构造函数可以重载


5、如果我们没有显式定义构造函数,编译器会自动生成一个构造函数,即默认构造函数

6、默认构造函数对基本类型不做处理,对自定义类型会自动调用对象类的构造函数


同时,注意思考:
既然我们不写,编译器会自动生成默认构造函数,那么这个自动生成的默认构造函数调用的时候会做什么呢?
注意:C++98规则规定,内置类型不做处理,对自定义类型会调用构造函数
内置类型/基本类型:int/char/double/指针  (语言自己定义的类型) 
自定义类型:struct/class(也就是根据我们的需求而自定义的类型)
默认生成的构造函数,对内置类型不做处理,也就是说根本就不会调用
如果是自定义类型,对自定义类型就会去调用类的构造函数
什么意思?
假如一个类内部的成员变量全都是内置类型,那么就不会调用构造函数
如果是类内部有成员变量是我们自定义的内置类型,就会去调用这个自定义变量类它自己的构造函数
举个例子:
我们声明了一个类A
然后,又声明了一个类B
我们在类B的内部定义了一个类A的变量
那么,此时这个类A就是一个自定义类型,因为它不属于任何一个基本数据类型
所以,此时这个自定义类型A就会去调用这个类A本身内部的构造函数
注意,调用构造函数,本质上是一种初始化,从这个角度理解也许会更加顺畅一点
但是后来,委员会觉得对内置类型不做处理似乎有些不太合适
所以,在后来的C++11版本
对这个机制做了一个补丁:
即基本类型可以使用缺省声明
所以,在类内部的基本类型int、char、double等可以给缺省值
但是要注意,是缺省,不是定义初始化

事实上,所有的自定义类型层层向底层套,最底层都一定是内置类型
而这个内置类型,始终都是需要我们自己去定义处理的

7、默认构造函数共有三种形式:无参数构造函数、全缺省构造函数、编译器自动生成的默认构造函数


构造函数,只能取以上三种的其中一个
如果我们没有写任何一个构造函数,编译器就会生成一个默认构造函数
如果我们写了无参数构造函数或者全缺省构造函数,那么编译器就不会再生成默认构造函数
但是注意:
尽管构造函数可以重载,但是默认构造只能有一个
因为,写了,就不会生成;不写,就会生成
而对于我们自己写的无参数构造函数和全缺省构造函数只能写一个
为什么?
因为,如果同时写,就会造成调用歧义
因为二者都是不传参数,那么编译器怎么知道要调用哪一个呢?
所以,只能选其一
但是,一般来说,我们更加推荐写全缺省的构造函数
因为,可以不传参,也可以部分传参,更可以全部传参,相较之下更加灵活
那么,为什么默认构造函数不能有形参呢?
因为,默认构造函数最重要的机制是编译器自动调用
如果你写了一个形参进去,编译器怎么自动调用这个构造函数呢?
还得你传个参数才能调用,那编译器还自动个什么?
所以,就会报错。

如果对你有帮助,点个赞吧!


http://lihuaxi.xjx100.cn/news/2085921.html

相关文章

蓝桥杯历年真题 java b组 2015年 第六届 牌型种数

一、题目 牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题: 如果不考虑花色&…

系统质量属性与架构评估

本博客地址:https://security.blog.csdn.net/article/details/136565452 一. 软考系统质量属性 1、软件系统质量属性是一个系统的可测量或可测试的属性,基于软件系统的生命周期,可将软件系统的质量属性分为开发期质量属性和运行期质量属性 …

后端八股笔记------Redis

Redis八股 上两种都有可能导致脏数据 所以使用两次删除缓存的技术,延时是因为数据库有主从问题需要更新,无法达到完全的强一致性,只能达到控制一致性。 一般放入缓存中的数据都是读多写少的数据 业务逻辑代码👇 写锁&#x1f4…

不要在代码中随便使用try...catch了

前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 目录 背景 js中的try...catch try...catch运行机制 js的事件循环机制 try...c…

如何在Linux部署FastDFS文件服务并实现无公网IP远程访问内网文件——“cpolar内网穿透”

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

c++中static的作用

在 C 中,static 关键字可以用于变量、函数和类成员,具体作用如下: 静态变量(Static Variables): - 用于在函数内部声明的静态变量会保留其值,直到程序的生命周期结束。 - 静态局部变量只会…

游戏中主流的护甲计算

文章目录 1、护甲1.1、主流的护甲函数1.2、护甲穿透1.3、护甲穿透(按百分比)1.3、格挡 2、攻速和DPS3、暴击3.1、暴击率3.2、暴击伤害 4、最后一题 1、护甲 1.1、主流的护甲函数 当护甲>0时,护甲函数如下: 伤害减免 1 − 1 …

c/c++输入和输出标准库stdio和iostream介绍

介绍 在 c 和 c语言中,对输入和输出提供了标准库函数来进行操作,下面介绍一些常用的标准库函数的使用。 c 语言的stdio.h 在C语言中,stdio.h是标准库的头文件之一,提供了输入和输出操作的函数和宏定义。它包含了一些常用的函数…