[关闭]
@cxm-2016 2016-09-06T15:37:57.000000Z 字数 1012 阅读 1703

C++:特殊成员函数

c++ no
作者:陈小默


C++中自动提供了下列五种成员函数

默认构造函数

如果我们没有提供构造函数,那么C++将会自动创建一个默认的构造函数。这个构造函数不接受任何参数,也不执行任何操作。当我们定义了构造函数,C++将不再提供默认的构造函数。如果我们希望在创建对象的时候不显式的对它进行初始化,就必须要提供一个默认的构造器。当然我们也可以使用默认参数列表的构造函数来充当默认构造器。下列两种方法都可以作为默认构造器:

  1. Vector();
  2. Vector(double x=0,double y=0);

需要注意的是,我们不能同时定义上述两种方法。对于编译器来说这会产生二义性,比如当我写出下面的代码时,编译器就不知道具体要调用哪一种构造方法了。

  1. Vector v;

默认析构函数

同理,当我们没有提供显式的声明一个析构函数时,C++会为我们提供一个默认的无行为的析构函数。

复制构造函数

注意这是一个构造函数。复制构造函数的作用是将一个对象复制到新创建的对象中。也就是说,它用于初始化过程中,而不是常规的复制过程中。类的复制构造函数原型通常如下:

  1. ClassName(const ClassName &);

它接受一个指向类对象的常量作为参数。

何时调用复制构造函数

新建一个对象并将其初始化为已有的对象时,复制构造函数将会被调用。假如现在已经有了一个Vector对象v

  1. Vector v1(v);
  2. Vector v2 = v;
  3. Vector v3 = Vector(v);
  4. Vector * v4 = new Vector(v);

最后一种声明使用v初始化一个匿名对象,并且将新对象的直线赋给了v4指针。这里需要注意的是,按值传递意味着创建原始变量的一个副本并产生一个临时对象。由于按值传递对象将调用复制构造函数,因此我们应该尽量使用按引用传递,这样可以节省调用构造函数的时间以及存储新对象的空间。

默认复制构造函数的功能

默认复制构造函数会逐个复制非静态成员,复制的是成员的值。

赋值运算符

在默认情况下,赋值运算符将调用复制构造函数,就像上面示例的v2。

地址运算符

隐式地址运算符返回调用对象的地址(即this指针的值)。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注