开发者

C++中类的构造函数初始值列表解读

开发者 https://www.devze.com 2022-12-03 11:15 出处:网络 作者: 棉猴
目录C++类的构造函数初始值列表1 通过构造函数初始值列表来初始化成员变编程客栈量2 通过构造函数的函数体来初始化成员变量3 类包含常量或引用成员变量C++类的构造函数的作用C++类的构造函数初始值列表
目录
  • C++类的构造函数初始值列表
    • 1 通过构造函数初始值列表来初始化成员变编程客栈
    • 2 通过构造函数的函数体来初始化成员变量
    • 3 类包含常量或引用成员变量
  • C++类的构造函数的作用

    C++类的构造函数初始值列表

    1 通过构造函数初始值列表来初始化成员变量

    C++中类的构造函数初始值列表可以对类的成员进行初始化。

    class myClass{
     public:
     开发者_C教程int i;
     myClass(): i(1)
     {
     }
    };

    其中,类myClass的构造函数中包含了初始值列表,对成员变量i进行初始化。

    2 通过构造函数的函数体来初始化成员变量

    除了通过构造函数初始值列表来初始化成员变量外,还可以通过构造函数的函数体来初始化成员变量。

    class myClass{
     public:
     int i;
     myClass()
     {
      i = 1;
     }
    };

    此时,成员变量i的初始值是1。

    3 类包含常量或引用成员变量

    当类包含有常量成员变量或者引用成员变量时

    class myClass{
    public:
     int i;
     const int ci;
     int& ri;
    };

    如果类没有定义构造函数,则使用默认的构造函数来创建对象

    myClass mc;

    此时,编译器会报错,报错信息为“error C2280: “myClass::myClass(void)”: 尝试引用已删除的函数”。因此,需要编写myClass类的构造函数对常量成员变量和引用成员变量进行初始化。

    3.1 不能在构造函数的函数体来初始化常量或引用成员变量

    在myClass类的构造函数体内对常量或引用成员变量进行初始化

    myClass()
    {
     i = 1;
     ci = 2;
     ri = i;
    }

    此时,编译器会报错,报错信息为“ epythonrror C2789: “myClass::ci”: 必须初始化常量限定类型的对象”。

    3.2 在类的构造函数初始值列表来初始化常量或引用成员变量

    myClass():i(1),ci(2),ri(i)
    {
    }

    此时,程序可以成功编译。

    C++类的构造函数的作用

    构造函数的作用

    为了解决给对象成员初始化赋值的问题,C++提供了“构造函数(constructor)”来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。

    构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理。构造函数不返回任何值,所以,函数没有返回类型。

    例如,定义一个C++类,类名是 student,如下:

    class student //以class开头
    
    { ... };

    那么,构造函数的函数名与类名相同,所以,构造函数的函数名是student,例如:

    student(); //没有参数的构造构造函数;
    
    student(char* name); //带参数的构造函数;

    构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。

    在讲解构造函数之前,我们先写一个例子,测试构造函数的使用。

    测试代码如下:

    C++中类的构造函数初始值列表解读

    程序的运行结果有:

    C++中类的构造函数初始值列表解读

    在类student中定义了构造函数:

    student(char* pn, char* pa, long long n);

    构造函数的名称和所在的类同名。在建立对象时自动执行构造函数,它的作用是对定义的对象进行初始化。例如给成员变量赋初值,赋值语句是写在构造函数的函数体中,只有在调用构造函数的时候,才执行这些赋值语句,为当前对象的成员变量赋值。

    在上面的例子中,我们定义了stud对象,在定义对象的同时,给对象的成员变量赋值。

    定义对象如下:

    student stud("wkf", "www.mylinux.vip", 13926572996);

    此时,定义stud对象,给对象设置3个数据,根据这些数据的类型,就调用对应的构造函数:

    student(char* pn, char* pa, long long n);

    所以,把参数设置到对应的构造函数中,python如下:

    pn = "wkf";
    
    pa = "www.mylinux.vip";
    
    n = 13926572996;

    给构造函数的参数设置数据之后,就执行构造函数。

    上面是在类内定义构造函数,也可以只在类内对构造函数进行声明,而在类外定义构造函数。在类外定义构造函数,如下:

    C++中类的构造函数初始值列表解读

    可以看到,把student(char* pn, char* pa, long long n);构造函数放在类外定义。

    有关构造函数的使用,有以下说明:

    (1) 构造函数的名称,与类名一样。

    (2) 什么时候调用构造函数?定义类对象的时候,开始构建对象,调用类的构造函数。

    (3) 构造www.devze.com函数没有返回值,因此,也不需要在定义构造函数时声明函数返回类型,这是它和一般函数的一个重python要的不同之点,不能写成:

    void student ()
    
    {.....}

    构造函数的作用主要是用来对对象进行初始化。

    (4) 构造函数是建立对象时由系统自动执行的,而且只执行一次。所以,构造函数不能够由用户调用。

    (5) 在构造函数的函数体中不仅可以对成员变量赋初值,而且,可以包含其他语句,例如cout语句。但是,一般不提倡在构造函数中加入与初始化无关的内容。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号