C++的默认结构函数
当前位置:以往代写 > C/C++ 教程 >C++的默认结构函数
2019-06-13

C++的默认结构函数

C++的默认结构函数

1、每个类必需有一个结构函数,不然没法建设工具;

2、若programer没有提供任何结构函数,则C++提供一个默认的结构函数,该默认结构函 数是无参结构函数,它仅认真建设工具,不做任何初始化的事情;

3、只要programer界说了一个结构函数(不管是无参照旧有参结构),C++就不再提供默 认的默认结构函数。即假如为类界说了一个带参的结构函数,还想要无参结构函数,就必需 本身界说;

4、与变量界说雷同,在用默认结构函数建设工具时,假如建设的是全局工具或静态工具 ,则工具的位模式全为0,不然,工具值是随机的。

注:2所述,C++在某些环境下会提供默认结构函数,但在某些环境下并不会自动挪用。

实事上,当用户没有提供自界说的结构函数的时候,声明该类的工具,以及界说包括该对 象的数组,都不会挪用默认结构函数;但界说包括该工具的容器时,会自动挪用默认的结构 函数。

举譬喻下:

 #include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;

class Student
{
public:
    // Student() : val(6){} // 1
    // Student(int val) : val(6){} // 2
    int val;
};

void main()
{
    Student s;
    cout << s.val; // 编译通过,但运行时堕落:the variable 's' is being used without being defined.
             // 说明没有挪用默认结构函数

    Student arr[4];
    cout << arr[2]; // 编译通过,但运行堕落:the variable 'arr' is being used without being defined.
             // 说明没有挪用默认结构函数

    vector<Stu> vec(5);
    cout << vec[3].val << endl; //运行无误,但输出功效未界说(取 决于编译器,大概是随机值或0)
                      // 说明挪用了默认结构函数

    Student *ptr = new Student[4];
    cout << ptr[1].val; //运行无误,但输出功效未界说(取决于编译器,可 能是随机值或0)
                 // 说明挪用了默认结构函数

    Student ss = Student(); // 显示挪用
    cout << ss.val; // 运行无误,但输出功效未界说(取决于编译器,大概是 随机值或0)
                // 说明挪用了默认结构函数
}

若将Student界说体中的注释1去掉,即自界说无参结构函数,则main函数中的几种形式的 工具界说城市挪用该自界说的无参结构函数;

但只将注释2去掉,即自界说带参结构,而不提供无参结构,则main函数的几种形式的对 象界说都将因为没有可用的默认结构函数而编译堕落。

    关键字:

在线提交作业