热门标签 | 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++技术分享栏目—编程笔记


    推荐阅读
    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社区 版权所有