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

c/c++开发分享详解C++构造函数

目录1.作用2.代码举例2.1示例1:2.2示例2:3.使用3.1使用构造函数初始化3.2有参数的构造函数3.3默认的构造函数4.成员初始化列表例1:正常初始化例2:
目录
  • 1.作用
  • 2.代码举例
    • 2.1 示例1:
    • 2.2 示例2:
  • 3. 使用
    • 3.1 使用构造函数初始化
    • 3.2 有参数的构造函数
    • 3.3 默认的构造函数
  • 4. 成员初始化列表
    • 例1:正常初始化
    • 例2:成员初始化列表
    • 为啥推荐成员初始化列表的写法?
  • 总结

    %ignore_a_1%

    1.作用

    一种特殊类型的方法,在每次实例化对象时运行

    2.代码举例

    2.1 示例1:

      #include   class a  {      public:          float a, b;          void print()          {              std::cout <
    

    运行结果:

    详解C++构造函数

    当我们实例化a,系统为它分配内存,我们没有初始化内存,得到的是内存空间原有的那些东西

    2.2 示例2:

    当在main中添加 std::cout <

      int main()  {      a a;      std::cout <
    

    (ubuntu下 vs code )运行结果

    详解C++构造函数

    不同编译器可能不一样,有的会编译不过报错(未初始化局部变量),原因有待深入…

    3. 使用

    3.1 使用构造函数初始化

      #include   class a  {      public:          float a, b;          a ()          {              a = 0.0f;              b = 0.0f;          }          void print()          {              std::cout <
    

    结果:

    详解C++构造函数

    3.2 有参数的构造函数

      #include   class a  {      public:          float a, b;      // 无参构造      a ()          {              a = 0.0f;              b = 0.0f;          }      // 有参构造          a(float c,float d)          {              a = c;              b = d;          }                void print()          {              std::cout <
    

    一个类可以有很多构造函数 前提是参数个数不同或者参数类型不同

    类似于同名函数(函数重载 即有相同的函数名,但是有不同的参数个数与参数类型)

       a(float c,float d)   {   }  a(int c,int d)  {  }  a(float c,float d,float e)  {  }  

    这里需要注意有参构造的时候注意传值类型

    float 类型

      a a(5.0f , 6.0f);  

    3.3 默认的构造函数

    每个类默认有一个空参空实体的构造函数(如果写了构造函数,则默认构造函数就没有了,需要时需手动添加)

      a ()  {  }  

    如果不想使用构造函数有两种方法

      // 1 私有化  private :  	a(){}  // 2 删掉  a() = delete;  

    4. 成员初始化列表

    例1:正常初始化

      #include   using namespace std;  class student  {  private:      const char *m_name;      int m_age;      float m_score;  public:      // 无参构造 给变量赋定值      student()      {          m_name = "aaa";          m_age = 1;          m_score = 99.0;      }      // 有参构造  给变量动态赋值      student(const char *name, int age, float score)      {          m_name = name;          m_age = age;          m_score = score;      }      void print ()      {          cout <
    

    例2:成员初始化列表

      #include   #include   using namespace std;  class student  {  private:      // string m_name;      // char *m_name;      const char *m_name;      int m_age;      float m_score;  public:         //  无参 成员初始化列表        student()           : m_name("bbb") , m_age(2) , m_score(93.0f)       {          // todo      }      // 有参 成员初始化列表        /**       *  const char *name    常量指针     const 修饰*name   *name不可改变       *  char * const name   指针常量     const 修饰 name   name不可改变       *  char const *name    常量指针 等同于 const char *name        *        *  这里不写const 会报警告  但可以编过         *        */      student(const char *name, int age, float score)          : m_name(name) , m_age(age) , m_score(score)      {         // todo      }      void print ()      {          cout <
    

    运行结果都一样:

    aaa ,1 ,99
    ccc ,2 ,99.3

    使用构造函数初始化列表并没有效率上的优势,仅仅是书写方便,尤其是成员变量较多时,这种写法非常简单明了。

    初始化列表可以用于全部成员变量,也可以只用于部分成员变量

      student(char *name, int age, float score): m_name(name){      m_age = age;      m_score = score;  }  

    note:成员变量的初始化顺序与初始化列表中列出的变量的顺序无关,它只与成员变量在类中声明的顺序有关。

    为啥推荐成员初始化列表的写法?

      #include   using namespace std;  class example  {  public:      example()      {          cout<<"create example" <
    

    结果:

    详解C++构造函数

    a的构造函数换成成员初始化列表的写法

      //    a() : m_name ("name"),m_example(example(1))  		与下面写法相同  a() : m_name ("name"),m_example(1)      {      }  

    结果:

    详解C++构造函数

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注<编程笔记>的更多内容!

    需要了解更多c/c++开发分享详解C++构造函数,都可以关注C/C++技术分享栏目—编程笔记


    推荐阅读
    • [c++基础]STL
      cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
    • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
    • 单片微机原理P3:80C51外部拓展系统
        外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
    • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
      createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
    • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
    • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
    • 开机自启动的几种方式
      0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
    • 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4277。作者:Bob Lee,日期:2012年9月15日。题目描述:给定n个木棍,求可以组成的不同三角形的数量,最多15根木棍。 ... [详细]
    • 本文介绍了并查集(Union-Find算法)的基本概念及其应用。通过一个具体的例子,解释了如何使用该算法来处理涉及多个集合的问题。题目要求输入两个整数 n 和 m,分别表示总人数和操作次数。算法通过高效的合并与查找操作,能够快速确定各个元素所属的集合,适用于大规模数据的动态管理。 ... [详细]
    • 本文探讨了基础二分法在数据报告生成中的应用及其优化策略。通过分析二分法在处理大规模数据集时的高效性和准确性,提出了若干改进措施,以提升数据报告的生成速度和质量。具体包括算法的并行化处理、数据预处理技术的应用以及异常值的处理方法,旨在为数据分析师提供更为高效和可靠的工具。 ... [详细]
    • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
      在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
    • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
    • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
    • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
    • XAMPP 遇到 404 错误:无法找到请求的对象
      在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
    author-avatar
    2449978963潇潇
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有