关于构造函数

2023-11-20

使用构造函数

  • 两种使用构造函数的初始化方式:
    Stock food = Stock("World", 250, 1.25);等价于:
    Stock garment("Furry", 50, 2.5);

  • 将构造函数与new一起使用:(new可以调用构造函数)
    Stock *pstock = new Stock("Electroshock", 18, 19.0);


通过构造函数赋值

构造函数不仅仅可用于初始化新对象,还可以给已经存在的对象赋值
stock1 = Stock("Nifty", 10, 50.0);
这是通过让构造函数创建一个新的、临时的对象,然后将其内容复制给stock1来实现的。随后程序调用析构函数,以删除该临时对象。


默认构造函数

默认构造函数没有参数,因此如果创建对象时没有进行显式初始化,则将调用默认构造函数。
如果程序中没有提供任何构造函数,则编译器会为程序定义一个默认构造函数;否则,必须自己提供默认构造函数。
带参数的构造函数也可以是默认构造函数,只要所有参数都有默认值,如:
Klunk(int n=0) { klunt_ct=n; }
但只能有一个默认构造函数,否则会造成二义性

Klunk kar() { klunk_ct = 0; }
Klunk(int n = 0) { klunt_ct = n; }

在构造函数中使用new时应注意的事项

  1. 构造函数中使用了new,要在析构函数中使用delete。
  2. new要和delete匹配:new对应于delete,new[]对应于delete[]。
  3. 多个构造函数中,要么都不带中括号(new),要么都带中括号(new[])。
  4. 应定义一个复制构造函数1,通过深度复制将一个对象初始化为另一个对象。
  5. 应当定义一个赋值运算符,通过深度复制将一个对象复制给另一个对象。

构造函数调用顺序

  1. 如果存在基类,那么先调用基类构造函数;
  2. 如果存在包含关系2,那么在基类构造函数调用完成以后,再调用被包含的对象的构造函数;
  3. 调用派生类的构造函数。

  1. 详见 “复制构造函数和深度复制” ↩︎

  2. 详见 私有继承—>“私有继承与包含” ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于构造函数 的相关文章

随机推荐