C++中构造函数的分类和三种调用方法(附C++代码)

目录

一、构造函数的分类

1.1 无参构造函数

1.1.1 作用

当对象创建时未传递任何参数时自动调用。

用于初始化默认值。

1.1.2 代码

无参构造函数的代码见下:

// 无参构造
Person()
{
    cout << "Person的无参构造函数调用!" << endl;
}

    1.2 有参构造函数

    1.2.1 作用

    用于在对象创建时传递初始化参数。

    可以定义多个版本(函数重载)。

    1.2.2 代码

    有参构造函数的代码见下:

    // 有参构造
    Person(int a)
    {
        age = a;
        cout << "Person的有参构造函数调用!" << endl;
    }
    

      1.3 拷贝构造函数

      1.3.1 作用

      用于创建一个新对象并将另一个对象的值拷贝到新对象。

      通常由编译器提供默认实现,但在某些情况下需要自定义。

      1.3.2 代码

      拷贝构造函数的代码见下:

      // 拷贝构造函数
      Person(const Person& p)
      {
          // 将传入的人身上的所有属性,拷贝到我身上
          age = p.age;
          cout << "调用拷贝构造函数!" << endl;
      }
      

        二、构造函数的调用

        2.1 括号法

        2.1.1 使用

        使用小括号直接传参调用构造函数。

        2.1.2 代码

        括号法调用构造函数的示例代码见下:

        //1、括号法
        Person p1;       // 默认构造函数的调用
        Person p2(20);   // 因为传了一个数值,所以会调用有参构造函数
        Person p3(p2);   // 调用拷贝构造函数
        cout << "p2的年龄为:" << p2.age << endl;
        cout << "p3的年龄为:" << p3.age << endl;
        
          2.1.3 注意事项

          调用默认构造函数时候,不要加()

          因为Person p1();代码,编译器会认为是一个函数的声明,不会认为在创建对象。

          2.2 显示法

          2.2.1 使用

          用显式的 = 和构造函数调用初始化对象。

          2.2.2 代码

          显示法调用构造函数的示例代码见下:

          //2、显示法
          Person p1;
          Person p2 = Person(10);    // 调用有参构造
          Person p3 = Person(p2);    // 调用拷贝构造
          
            2.2.3 注意事项

            Person(p3);

            不要利用拷贝构造函数,初始化匿名对象,编译器会认为Person(p3) == Person p3。

            2.3 隐式法

            2.3.1 使用

            直接赋值或传入对象。

            2.3.2 代码

            隐式法调用构造函数的实例代码见下:

            //3、隐式转换法
            Person p4 = 10;     // 相当于 写了 Person p4 = Person(10);
            Person p5 = p4;     // 拷贝构造函数的调研
            

              三、完整代码

              上面构造函数的分类和调用方法,完整代码见下:

              #include<iostream>
              using namespace std;
              #include <ctime>
              #include <string>
              
              // 1、构造函数的分类及调用
              // 分类
              // 按照参数分类  无参构造(默认构造)和有参构造
              // 按照类型分类  普通构造  拷贝构造
              
              class Person
              {
              public:
                      // 构造函数
                      // 无参构造
                      Person()
                      {
                          cout << "Person的无参构造函数调用!" << endl;
                      }
                      // 有参构造
                      Person(int a)
                      {
                          age = a;
                          cout << "Person的有参构造函数调用!" << endl;
                      }
                      // 拷贝构造函数
                      Person(const Person& p)
                      {
                          // 将传入的人身上的所有属性,拷贝到我身上
                          age = p.age;
                          cout << "调用拷贝构造函数!" << endl;
                      }
              
                      // 析构函数
                      ~Person()
                      {
                          cout << "析构函数的调用!" << endl;
                      }
                      int age;
              };
              
              // 调用
              void test01()
              {
                  //1、括号法
                  Person p1;       // 默认构造函数的调用
                  Person p2(20);   // 因为传了一个数值,所以会调用有参构造函数
                  Person p3(p2);   // 调用拷贝构造函数
              
                  cout << "p2的年龄为:" << p2.age << endl;
                  cout << "p3的年龄为:" << p3.age << endl;
              
                  // 注意事项
                  // 调用默认构造函数时候,不要加()
                  // 因为下面这行代码,编译器会认为是一个函数的声明,不会认为在创建对象
                  // Person p1();
              
                  //2、显示法
                  //Person p1;
                  //Person p2 = Person(10);    // 调用有参构造
                  //Person p3 = Person(p2);    // 调用拷贝构造
              
                  // Person(10);      // 匿名对象,特点:当前执行结束后,系统立即回收掉匿名对象
                  // cout << "aaaa" << endl;
              
                  // 注意事项2
                  // 不要利用拷贝构造函数 初始化匿名对象,编译器会认为Person(p3) == Person p3;对象的申明
                  // Person(p3); 
              
                  //3、隐式转换法
                  Person p4 = 10;     // 相当于 写了 Person p4 = Person(10);
                  Person p5 = p4;     // 拷贝构造函数的调研
              
              }
              
              int main()
              {
                  test01();
                  
                  system("pause");
                  return 0;
                  
              }
              

                运行上面代码的输出见下:

                在这里插入图片描述

                四、总结

                已经就是C++中构造函数的分类和三种调用方法,希望能帮到你!本人参考学习的是黑马程序员,仅作为笔记记录。

                C++中构造函数的分类和三种调用方法(附C++代码)_c++ 调用构造函数-CSDN博客

                评论
                添加红包

                请填写红包祝福语或标题

                红包个数最小为10个

                红包金额最低5元

                当前余额3.43前往充值 >
                需支付:10.00
                成就一亿技术人!
                领取后你会自动成为博主和红包主的粉丝 规则
                hope_wisdom
                发出的红包
                实付
                使用余额支付
                点击重新获取
                扫码支付
                钱包余额 0

                抵扣说明:

                1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                余额充值