构造函数C++

news/2024/11/14 22:46:52/文章来源:https://www.cnblogs.com/xuzhenxuexi/p/18544213

1. 构造函数的介绍

  • 功能:专门用于对象的初始化工作,在类的对象创建时定义初始状态

  • 特点

    • 构造函数的名字和类名是相同的
    • 构造函数是没有返回值类型的,也不能写 void 。可以有形参(也可以重载)
    • 在创建对象的时候,会自动调用。而且是一定会调用,但是只会调用一次,不能通过已有对象
      手动调用构造函数。
    • 如果一个类中没有显示声明的构造函数,那么编译器会自动生成一个无参构造函数,自动生成
      的构造函数,函数体为空且没有参数。
    • 但是如果程序员写了至少一个构造函数,那么编译器就不会生成了。
    • 在存在多个构造函数的情况下,编译器会在调用构造函数的时候,根据构造函数的参数自动匹
      配相对应的构造函数进行调用
  • 构造函数格式
    class 类名 { 类名(构造形参表) { //主要负责对象的初始化,即初始化成员变量 } };

2.对象的创建

  • 在在栈区创建单个对象

类名 对象(构造实参表);
类名 对象 = 类名(构造实参表);
假设类名为Student
Student s = Student("蔡徐坤", 18, 10001); //Student s("蔡徐坤", 18, 10001);

  • 在栈区创建多个对象(对象数组)
    类名 对象数组(元素个数) = {类名(构造实参表),...}
    Student sarr[3] = { Student("古丽娜扎",20,10002), Student("迪丽热巴",22,10003), Student("马尔扎哈",25,10004) };
  • 在堆区创建单个对象
    创建:类名 *对象指针 = new 类名(构造实参表);
    销毁:delete 对象指针 //在堆区创建单个对象 Student *ps = new Student("林黛玉",19,10005); ps->who();//(*ps).who() 间接 delete ps; ps = NULL;
  • 在堆区创建对象数组
    创建:类名 *对象指针 = new 类名[元素个数]{类名(构造实参表),...}
    销毁:Student* parr = new Student[3] { Student("潘金莲",30,10006), Student("扈三娘",35,10007), Student("孙二娘",31,10008) }; parr[0].who();//(parr + 0)->who() parr[1].who();//(parr + 1)->who() parr[2].who();//(parr + 2)->who() delete[] parr; parr = NULL;
  • 小tips:malloc和new的区别:
    • malloc申请的内存区域返回类型是void *类型,需强制转换为对应类型才可使用后;而new则
      是自动生成所需要的类型。malloc申请内存需要手动计算大小,而new则自动计算相应的大
    • new会调用类构造函数为对象初始化,而malloc不会
  • new会调用类构造函数为对象初始化,而malloc不会new会调用类构造函数为对象初始化,而malloc不会
    3.构造函数参数的缺省
    Student(const string name, const int age = 0, const int id = 0)

4.构造函数的重载

  • C++中的函数参数支持重载,即函数名相同,但是参数列表不同,与返回值无关。构造函数和普通函数类似,也可以重载。
    Student(const string name, const int age, const int id) Student(const string name, const int age) Student(const string name)
    根据创建对象时的参数,调用不同的构造函数。

5.缺省(默认)构造函数

  • 如果类中没有定义任何构造函数(无参构造函数、含参构造函数),编译器会为该类提供一个缺省
    (无参)构造函数
    • 对于基本类型的成员变量不能初始化
    • 对于类类型的成员变量,会自动调用相应类的无参构造函数来初始化
  • 如果类中自己定义了构造函数,无论是否有参数,编译器都不会再提供缺省的无参构造函数了

6.初始化表

  • 除了使用构造函数来初始化类内的成员外,还有一种方式--初始化表
    Student(const string name, const int age, const int no) :m_name(name), m_age(age), m_no(no) {}
    多数情况下使用初始化表和在构造函数体中赋初值没有太大区别,可以任选一种方式,但是在某些特殊情况下必须要使用初始化表:
  • 如果有类类型的成员变量,而该类又没有无参构造函数,则必须通过初始化表来初始化该变量
  • 如果类中包含"const"或"引用"型的成员变量,必须要使用初始化表来初始化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833682.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自主研发RPA,基于uiautomatorviewer的自动化代码生成器,一键生成Java代码和Cucumber描述文件

介绍 基于UI Automator进行二次开发,让你不懂开发也能编写自动化测试代码, 一边生成代码一边Debug,毫不费力写出完美的自动化测试代码 。该工具集成了Tomcat使得添加新的功能的时候使用HTML+API进行开发,降低了开发难度;集成了Derby数据库,测试用例持久化到数据库。 软件…

关于NVIDIA Jetson AGX Xavier刷机过程记录

刷机记录,再刷机忘记了回来看看~主机电脑安装ubuntu20.04虚拟机,NVIDIA sdkmanager,主机端连上路由器提供的wifi。再将Jetson接上电源,但不开机。拿出附带的typec——USB数据线,typec端连上图中的typec口,USB连上主机电脑。找出一根网线,一端连接Jetson,另一端连接步骤…

shell编程 - 基础篇

1. Shell简介Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。2. Shell编程语言必知必会shell命令解释器:bash编程常用命令解释器.命令解释器bash 目前应用最广泛一…

第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision

第四届光学与机器视觉国际学术会议(ICOMV 2025)2025 4th International Conference on Optics and Machine Vision重要信息官网:https://ais.cn/u/vEbMBz

【os】操作系统是怎样一步步接收键盘按键的?

你有没有想过,按下键盘按键后,相应的字符是怎么一步步显示在屏幕上的? 首先来看硬件部分,你至少应该能想到必须得有键盘和CPU:之后呢,cpu是怎么知道有键盘按下呢? 为了让键盘按下按键后能通知到CPU,需要借助键盘控制器,keyboard controller,这当然也是硬件:当按下按…

Kafka学习day01

Kafka的学习day01-Kafka基础环境的搭建Kafka Centos7环境搭建 1. 安装Zookeeper 1.1 官网下载安装包ZooKeeper官网下载地址1.2 使用Xftp或远程工具将ZooKeeper安装包上传文件到服务器或虚拟机1.3 编写配置文件 进入ZooKeeper安装目录 cd {安装目录}/conf/1.3.1 配置文件模版 # …

从数据到知识,知识中台赋能企业智能化升级

在信息爆炸的时代,企业面临着数据泛滥与知识匮乏的双重挑战。如何将海量的数据转化为有价值的知识,进而驱动企业的智能化升级,已成为企业竞争力的关键。知识中台作为企业数字化转型的核心,正逐渐成为企业智能化升级的新引擎。 一、数据与知识的转化 数据本身并不等同于知识…

基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现十

审核前台用户认证信息、查看所有用户、订单、发布文章、发布常见问题等。 该系统总共24张表,代码整洁,每个功能、接口上都有注释说明。 运行环境:jdk1.8、mysql5.x、eclipse/idea、maven3.5/3.6 包远程运行的哦。 特色功能:发布课程、学习课程、分享资料、资料讨论等。 部分…

基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现九

该系统总共24张表,代码整洁,每个功能、接口上都有注释说明。 运行环境:jdk1.8、mysql5.x、eclipse/idea、maven3.5/3.6 包远程运行的哦。 特色功能:发布课程、学习课程、分享资料、资料讨论等。 部分功能:前台课程评论信息控制器Controller、优惠卷信息控制器Controller、…

SharePoint Online页面的一些奇怪参数

前言最近,在查找资料的时候,偶然间发现了一些非常有意思的参数,如下:?env=Embedded or ?env=WebView&wdStartOn=21.正经的SharePoint Online页面2.加了参数的SharePoint Online 页面3.加了另一个参数的SharePoint Online页面结束语相信大家看效果就已经发现了,参数是…

Alpha冲刺(2/14)——2024.11.13

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录项目运行截图五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余…

PS端Flash固化

PS端Flash固化Vivado版本:Vivado2020.2 芯片型号:RFSoC XCZU47DR 前提条件:Vitis工程编译完成,拨码开关拨到PS JTAG模式创建引导镜像 首先右键应用工程系统,点击Create Boot Image。检查镜像工程的文件是否为固化需要的工程文件,点击创建镜像的选项即可完成创建,创建完成…