C++中构造函数创建对象

时间:2021-01-26 19:29:41

1、 C++中构造函数的调用方式主要分为两类:

1)显示调用:

eg: Stock food = Stock("360",250,2.5);

2)隐式调用;

eg:Stock food("360",250,2.5);

注意:显示调用构造函数大多编译器理解为对food进行初始化,这也是最正确的理解方式,因此直道food所在的作用域到达尽头,才调用析构函数进行清理;而有的编译器将Stock food = Stock("360",250,2.5;理解为:先创建一临时对象,然后将其赋值给food,然后在删除临时对象。如果是这样,则会调用一次析构函数,对对象进行清理。这种创建方式和 food = Stock("360",250,2.5比较相似,即对food进行复位。

C++11新标准,增添了对象的列表初始化:

eg:Stock food = {"360",250,2.5};

eg:Stock food {"360",250,2.5};

2、 默认构造函数:

默认构造函数分为三类:

1)声明类时,程序员不声明任何构造函数,则编译器为该类增添一不含任何参数的构造函数,该构造函数也不对该类的任何成员变量进行初始化,即:成员变量的值未被初始化。

2) 声明类时,程序员声明一个不含参数的构造函数,该构造函数可以对类成员变量进行默认初始化;

3)声明类时,程序员声明一个含默认参数的构造函数,那么定义对象时成员变量将被默认参数初始化;

注意:只有在程序员不声明任何构造函数的情况下,编译器才会为类增添一个不含任何参数的默认构造函数,如果程序员偷懒,定义对象时:Stock food;则编译器将报错,因此为了编译成功,程序员最好为类增添一个隐式初始化的默认构造函数。若添加两个默认构造函数,则在调用默认构造函数初始化对象时会出错,编译器不知道调用哪一个。

3、默认构造函数的调用:

eg: Stack food;

eg: Stack food();//典型错误方法

eg:Stack food = Stack();

默认构造函数写法最简单,因此程序员最好为类增添一个默认构造函数啊!

4、复制构造函数

当时用一个对象类初始化另一个对象时,编译器将自动生成复制构造函数。该函数将生成一个副本对象,并将该副本对象中的非静态数据成员拷贝给要初始化的对象,因此,忽视了对静态成员的处理,容易引发难以检查的错误。

eg: Stock food = Stock("360",250,2.5);

将调用复制构造函数,对food进行复制初始化。