首页 > 编程语言 >构造函数C++

构造函数C++

时间:2024-11-14 22:40:55浏览次数:1  
标签:初始化 const C++ Student new 类名 构造函数

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"或"引用"型的成员变量,必须要使用初始化表来初始化。

标签:初始化,const,C++,Student,new,类名,构造函数
From: https://www.cnblogs.com/xuzhenxuexi/p/18544213

相关文章

  • 每日OJ题_牛客_计算字符串的编辑距离_DP_C++_Java
    目录牛客_计算字符串的编辑距离_DP题目解析C++代码Java代码牛客_计算字符串的编辑距离_DP计算字符串的编辑距离_牛客题霸_牛客网描述:Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换......
  • C++函数的返回值在内存中的传递过程及什么是虚拟内存,为什么要使用虚拟内存,虚拟内存可
    1) C++函数的返回值在内存中的传递过程在C++中,函数返回值在内存中的传递过程如下:基本数据类型返回值传递当函数返回基本数据类型(如`int`、`double`、`char`等)时,函数会将返回值存储在一个临时的寄存器中。然后,调用函数的地方会从这个寄存器中获取返回值,并将其存储到相应......
  • 什么是C++命名空间 有什么作用?如何定义使用命名空间?且交代命名空间是否允许嵌套?
    1)什么是C++命名空间有什么作用?命名空间的定义:在C++中,命名空间(Namespace)是一种将代码组织成逻辑组的机制,用于避免不同代码模块之间的命名冲突。它提供了一个声明区域,在该区域内可以定义各种类型、函数、变量等,并且这些定义的名称在该命名空间内是唯一的。命名空间的作用:......
  • C++基础编程(一)
    If语句,条件运算符&&||,运算符优先级,for循环语句,switch语句,continue,break,do,while打印一个锥形1~9矩阵,打印9*9乘法表,For(初始化;条件;每次循环必执行语句)输出abcd....ABCD....0123....输出从1~1000,能被7整除的数While输入一组数,0为结束,计算他们的和......
  • C++ 友元跨命名空间使用
    以+运算符重载为例:#include<iostream>#include<string>//前置声明是必须的namespacemydog{classDog;}namespacemyadd{mydog::Dogoperator+(constmydog::Dogdog1,constmydog::Dogdog2);}namespacemydog{classDog{friend......
  • C++builder中的人工智能(29):如何在Windows项目中导入FANN库
    这篇文章旨在使用由SteffenNissen开发的FANN库实现人工神经网络。FANN库支持20多种编程语言,包括Delphi和C++Builder。您可以在FANN的官方网站上找到完整信息和文档,并下载FANN的源文件。步骤:下载FANN库:从Nissen的官方网站下载FANN库包(http://leenissen.dk),包含二进制文......
  • C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中
    人工智能软件和硬件技术正在迅速发展。我们每天都能看到新的进步。其中一个巨大的飞跃是我们拥有更多基于自然语言处理(NLP)和深度学习(DL)机制的逻辑性更强的AI聊天应用。有许多AI工具可以用来开发由C、C++、Delphi、Python等编程语言驱动的AI。本文将解释如何在C++Builder中使用......
  • C++builder中的人工智能(28):FANN: Fast Artificial Neural Networks快速人工神经网络(ANN
    这篇文章全面介绍了快速人工神经网络(ANNs)的世界,探讨了它们在现代计算智能中的重要地位、核心特点、应用领域以及未来发展。快速人工神经网络库(FastArtificialNeuralNetworkLibrary,简称FANN)是一个免费的开源神经网络库,它使用C语言实现了多层人工神经网络,并支持全连接和稀疏......
  • c++简介
    C++是一种面向对象的程序设计语言,它是在C语言的基础上发展起来的。C++拥有C语言的特性,例如高性能、底层控制和直接内存访问等,同时还添加了面向对象编程的特性,比如封装、继承和多态等。由于这些特性,C++在软件开发中非常灵活和强大。C++的应用非常广泛,它可以用于开发各种类型的......
  • 告别头文件,编译效率提升 42%!C++ Modules 实战解析
    编者按:AlibabaCloudLinux(简称“Alinux”)是目前阿里云上占比第一的操作系统。2021年,龙蜥以Alinux产品为基础发布了AnolisOS8正式版。本文中,阿里云智能集团开发工程师李泽政以Alinux为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个C++模......